XL 2010 [RESOLU] Formule et liste de validation

CharlesX

XLDnaute Nouveau
Bonjour

J'ai besoin d'aide pour automatiser une saisie entre 2 colonnes.
Ces 2 colonnes comportent deux liste de validation chacune
On va remplir indépendamment d'abord la colonne A ou B
J'aimerais que si Ax n'est pas vide alors Bx = une valeur spécifique de la liste de validation de la colonne B
Et inversement
si Bx n'est pas vide alors Ax = une valeur spécifique de la liste de validation de la colonne B

Un fichier d'exemple en pièce jointe

Merci de votre aide
Cdt
 

Pièces jointes

  • formule et lv.xlsx
    9.1 KB · Affichages: 47

CharlesX

XLDnaute Nouveau
Quelques précisions:
On remplit soit la colonne entrée1 soit la colonne entrée2
Si on remplit la colonne entrée1 alors la colonne entrée2 récupère la valeur "entrée1" pour que l'on sache que c'est la colonne entrée1 qui a été remplie.
Et inversement:
Si on remplit la colonne entrée2 alors la colonne entrée1 récupère la valeur "entrée2" pour que l'on sache que c'est la colonne entrée2 qui a été remplie.

Je pensais à une fonction vba mais je ne sais pas comment l'écrire
 

CharlesX

XLDnaute Nouveau
Merci

On s'approche
J'ai modifié le fichier pour qu'il corresponde à mon utilisation
Il n'y a pas besoin de correspondance entre les lignes de chaque colonne
Dès qu'il y a une entrée dans la colonne A, on doit trouver "Entrée1" dans la colonne B et dès qu'il y a une entrée dans la colonne B, on doit trouver "Entrée2" dans la colonne A.
Il y a également un bug dans le fichier si on efface le contenu de AxBx en même temps
Comme il n'y a pas besoin de correspondance entre les lignes, on peut peut etre faire plus simple

Merci de ton aide
Cdt
 

Pièces jointes

  • 222.xlsm
    16.1 KB · Affichages: 34

phlaurent55

Nous a quittés en 2020
Repose en paix
Re Bonjour,

Il y a également un bug dans le fichier si on efface le contenu de AxBx en même temps

Pour cette demande et éviter le bug il suffit de modifier le code comme ceci:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:B10")) Is Nothing And Target.Count = 1 Then
  Application.EnableEvents = False
  If Target.Column = 1 Then
  Target.Offset(0, 1) = "entrée1"
  Else
  Target.Offset(0, -1) = "entrée2"
  End If
Application.EnableEvents = True
End If
End Sub

à+
Philippe
 
Dernière édition:

CharlesX

XLDnaute Nouveau
Merci Phlippe

Ca fonctionne effectivement
Je suis arrivé au meme resultat avec ce code:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not (Intersect(Target, Range("A:A")) Is Nothing) Then
Application.EnableEvents = False
a = Target.Row
Cells(a, 2) = "Entrée1"
Application.EnableEvents = True
End If

If Not (Intersect(Target, Range("B:B")) Is Nothing) Then
Application.EnableEvents = False
a = Target.Row
Cells(a, 1) = "Entrée2"
Application.EnableEvents = True
End If

End Sub

Une seule chose m'embete encore (mais je crois que c'est inhérent à la fonction Not Intersect) c'est que quand on a sélectionné une fois qq chose dans une ligne, on ne peut plus la "vider".
On aura toujours soit entrée1 soit entrée2

Si tu as une idée ?
Sinon je passerais bien volontiers en Résolu

Merci de ton aide
Cdt
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,
Une seule chose m'embete encore (mais je crois que c'est inhérent à la fonction Not Intersect) c'est que quand on a sélectionné une fois qq chose dans une ligne, on ne peut plus la "vider".
On aura toujours soit entrée1 soit entrée2

Ce code fera l'affaire

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:B10")) Is Nothing Then
Application.EnableEvents = False
If Target.Column = 1 Then
Target.Offset(0, 1) = IIf(Target = "", "", "entrée1")
Else
Target.Offset(0, -1) = IIf(Target = "", "", "entrée2")
End If
Application.EnableEvents = True
End If
End Sub

à+
Philippe
 

Discussions similaires

Réponses
8
Affichages
414

Statistiques des forums

Discussions
312 113
Messages
2 085 430
Membres
102 889
dernier inscrit
monsef JABBOUR