selection de cases

  • Initiateur de la discussion Florent
  • Date de début
F

Florent

Guest
Bonjour le forum,

Volà ce que je souhaiterai faire et qui me donne plein de noeuds dans le cerveau
:eek:

si j'inscrit quelque chose dans la cellule A1 , il faudrait que les cellules A2,A3 et A4 soit vide
Si j'inscrit quelque chose dans la cellule A2, il faudrait que les cellules A1,A3 et A4 soit vide
Ect

Un peu le systeme de bouton d'option

Est ce que c'est possible et comment ?
:(

Merci d'avance à tous

Florent
 
F

Florent

Guest
hello gerard,

Merci pour ce debut de solution et cela fonctionne presque comme je le souhaitais.
le petit truc que j'ai peut être mal expliqué et ne fonctionne pas dans la démo c'est que si quelque chose est inscrit en A1 et que j'inscris quelque en A2 cela doit éffacer ce qui est inscrit en A1.

si tu as une suite à la solution que tu propose ( ou quelq'un d'autre qui suit ce post à une solution :) )

encore merci

Florent
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Florent, Gérard,

Ci-joint un exemple qui devrait répondre à ton besoin.

Le code utilisé est le suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim V As Variant
      'Si plage sélectionnée, sortir
      If Target.Count > 1 Then Exit Sub
      If Not Application.Intersect(Target, Range('A1:A4')) Is Nothing Then
            'Mémoriser la valeur de la cellule
            V = Target.Value
            If V <> '' Then
                  Application.EnableEvents = False
                  'Effacer la plage
                  Range('A1:A4').ClearContents
                  'Réaffecter la valeur à la cellule
                  Target.Value = V
                  Application.EnableEvents = True
            End If
      End If
End Sub

Cordialement, [file name=PourFlorent.zip size=14032]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PourFlorent.zip[/file]
 

Pièces jointes

  • PourFlorent.zip
    13.7 KB · Affichages: 26

andré

XLDnaute Barbatruc
Salut à vous,

Excellent, de cela je vais pouvoir m'en servir !

MDF, petite question.
Tu sais que la macro, ce n'est pas ma tasse de thé (lol).
Comment puis-je modifier le code au cas o&ugrave; les cellules ne sont pas contigu&euml;s.
Exemple : la plage A1:A4 deviendrait A1:A2 et A4:A5 (en A3 j'ai une formule qui ne peut pas être effacée).
Donc je dois remplacer deux fois Range('A1:A4') par ...

Merci d'avance.
Ândré.
 

andré

XLDnaute Barbatruc
Resalut,

Heureusement que je n'ai pas encore la réponse car ma question était incomplète !

En réalité, je souhaite appliquer cette procédure sur 4 colonnes, mais non contigu&euml;s, par exemple D, E, G et H, la colonne F étant réservée à des formules.
Donc si j'encode une valeur en E5, les valeurs en D5, G5 et H5 sont effacées.
Idem pour les autres lignes.

Si cette colonne intermédiare F devait poser problème, je puis toujours la déplacer.

Bon début de week-end.
Ândré.
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir André, le Forum

Ci-joint l'exemple adapté pour essayer de répondre à ta demande... je suis parti sur le même principe, pour une même ligne une saisie et une seule autorisée en colonnes D, E, G ou H...

J'ai utilisé le code ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim V As Variant
Dim
L As Long
      'Si plage sélectionnée, sortir
      If Target.Count > 1 Then Exit Sub
      Set Plage = Range('D:E, G:H')
      If Not Application.Intersect(Target, Plage) Is Nothing Then
            With Target
                  'Mémoriser la valeur de la cellule
                  V = .Value
                  L = .Row
                  If V <> '' Then
                        Application.EnableEvents = False
                        'Effacer la plage
                        Application.Intersect(Rows(L), Plage).ClearContents
                        'Réaffecter la valeur à la cellule
                        .Value = V
                        Application.EnableEvents = True
                  End If
            End With
      End If
End Sub
Cordialement, [file name=SaisieAlternee.zip size=16094]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SaisieAlternee.zip[/file]
 

Pièces jointes

  • SaisieAlternee.zip
    15.7 KB · Affichages: 17

andré

XLDnaute Barbatruc
Salut mDF,

Merci beaucoup !
Je te fais un petit exemple en cours de journée pour te montrer exactement à quoi cela va me servir.
Peut-être que cela pourra en intéresser d'autres ou que quelqu'un aurait une idée lumineuse pour encore améliorer la procédure.

A tantôt.
Ândré.
 

andré

XLDnaute Barbatruc
Resalut mDF,

Je me suis très fort faché (contre moi-même !).

Il est évident que les colonnes dont question ont des en-têtes !
Comment n'y avais-je pas pensé.

Que dois-je faire pour que cette macro ne fonctionne qu'à partir de la 4ième ligne (par exemple) ?

Je suppose que tu vois le problème.
C'est promis, plus jamais je ne m'énerverrai à l'encontre de quelqu'un qui ne pose pas une question précise et complète !

Cela me rappelle une célèbre réponse d'un ancien premier ministre belge (Achille Van Acker) à un journaliste qui lui demandait s'il avait bien refléchi à ce qu'il faisait : 'Non, moi j'agis d'abord, je reflechis ensuite !'.

Ândré.
 
F

Florent

Guest
bonjour à tous,

je ne pensais pas que mon petit pb serais autant suivi, cela fait vraiment plasir :)

j'ai voulu améliorer ce que je voulais faire en ajoutant de la couleur et une saisie automatique ( j'ai vu cela dans d'autre fil ) seulement j'ai de nouveau un petit souci

quand je selectionne une case , j'ai bien le 'X' qui se met automatiquement et j'ai bien la case qui se colore.Quand je clique sur une autre case , la 'X' change bien de place mais la couleur reste

:(

ci joint ci dessous les macros ( ecritent par le forum et que j'essai d'adapter... :S )

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim MaPlage As Range

Set MaPlage = Application.Intersect(Target, Range('B2:E2')) ' à adapter

If MaPlage Is Nothing Then
Exit Sub
ElseIf Target = '' Then
Target = 'X'
Selection.Interior.ColorIndex = 50
Else
Target = ''
Selection.Interior.ColorIndex = xlNone

End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Dim V As Variant
'Si plage sélectionnée, sortir
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range('B2:E2')) Is Nothing Then
'Mémoriser la valeur de la cellule
V = Target.Value
If V <> '' Then
Application.EnableEvents = False
'Effacer la plage
Range('B2:E2').ClearContents
'Réaffecter la valeur à la cellule
Target.Value = V
Application.EnableEvents = True
End If
End If
End Sub


Merci d'avance de votre aide

Florent
 

myDearFriend!

XLDnaute Barbatruc
Bonjour Florent,

Ta demande est complètement différente par rapport au problème initial là !

En ce qui concerne le X 'automatique' lors de la sélection de la cellule, tu peux utiliser la procédure ci-dessous en lieu et place de celle que j'avais proposé plus haut (c'est l'évènement SelectionChange() qu'on utilisera cette fois et non Change()) :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim V As Variant
Dim
Plage As Variant
      'Si plage sélectionnée, sortir
      If Target.Count > 1 Then Exit Sub
      Set Plage = Range('B2:E2')
      If Not Application.Intersect(Target, Plage) Is Nothing Then
            Application.EnableEvents = False
            'Effacer la plage
            Plage.ClearContents
            'Réaffecter X dans la cellule
            Target.Value = 'X'
            Application.EnableEvents = True
      End If
End Sub
En ce qui concerne la couleur dans cette cellule, pas besoin de code VBA là, une simple Mise en Forme Conditionnelle sur la plage concernée me paraît amplement suffisant :[ol][li]Tu sélectionnes ta plage B2:E2.[/li]
[li]Menu Format / Mise en forme conditionnelle...[/li]
[li]Tu choisis 'La valeur de la cellule est', puis 'Différente de' et dans la zone d'édition tu indiques ='' [/li]
[li]Ensuite, tu choisis le format que tu veux et tu valides.[/li][/ol]
Cordialement,
 
F

Florent

Guest
Bonjour myDearFriend, le forum

C'est vrai, cela devient completement different mais c'est du surtout que mon projet evolue, qu'on trouve de nouvelles idées (surtout qu'en on lit les autres messages )

Merci encore pour cette nouvelle solution ( :eek: que j'aurais pu trouver tout seule , mais à force de vouloir faire des choses compliquées , on en oubli les choses simples )

Florent

:)
 

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 087 954
Membres
103 686
dernier inscrit
maykrem