OVH Cloud OVH Cloud

Condition toujours égale à 1 comment éviter cela ?

3 réponses
Avatar
Julie
bonjour

j'ai une liste déroulante ( ComboVilles ) dans un userform et lorsque
je sélectionne le 1er index de la liste déroulante ( ComboVilles ) et
que je clique sur le bouton VALIDER, j'ai bien mon égalité, par contre
si je sélectionne les suivants, la valeur de ma liste déroulante ( ComboVilles )
n'est plus égale à la liste " Villes " et elle s'ajoute indéfiniment.
Or j'aimerai que chacunes des valeurs soient égales

Comment faire et quelle est la solution avec mon code ci-dessous ?

sur feuille nommée " donnees " j'ai en colonne C
C1 Villes -- en titre Villes =DECALER(donnees!$C$2;;;NBVAL(donnees!$C:$C)-1;)
C2 Paris
C3 Nice
C4 Lille
etc...

voici le code :

Private Sub UserForm_Initialize()
ComboVilles.RowSource = "donnees!Villes"
ComboVilles.ListIndex = 0 ' Paris
End Sub

' bouton valider
Private Sub BtnValider_Click()
With ComboVilles
ValeurComboVilles = ComboVilles.Value
ValeurDonneeListe = Range("donnees!C2").Value

' si égalité
If ValeurComboVilles = CStr(ValeurDonneeListe) Then
' si valeur deja dans ValeurDonneeListe , on ne fait rien
' on évite d'ajouter des doublons dans ValeurDonneeListe
msgBox ("value is in list " + CStr(ValeurDonneeListe))

Else

' msgBox ("donnee abs")
' si valeur absente dans ValeurDonneeListe , on l' ajoute
Range("donnees!C2").End(xlDown).Offset(1, 0).Value = ComboVilles.Value

'tri de la liste
Sheets("donnees").Activate
Range("Villes").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, Orientation:=xlTopToBottom
' réafficher la feuille
Sheets("clients").Activate
End If
End With
End Sub

Résultat :
là, j'ai la valeur " Paris " de ( ComboVilles ) qui est égale
à ma liste "Villes, C2 Paris" par contre si je sélectionne
Nice dans la liste déroulante ComboVilles, ma liste
" Villes " est égale à " Paris " ainsi de suite

Comment faire pour que chaque valeur de ComboVilles
soit égale à la liste " Villes " ?

Merci pour votre aide

JULIE

3 réponses

Avatar
Clément Marcotte
Bonjour,

Si tu te sers de ta plage feuille de calcul uniquement pour alimenter
ton ComboBox, tu peux utiliser à la place des fichiers textes pour
"mémoriser" ta liste de villes et alimenter ton ComboBox:

http://groups.google.com/groups?q=combobox+line+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&selm=Oylp3YyvCHA.2124%40TK2MSFTNGP11&rnum=1


Il y a aussi les routines pour refaire le fichier texte quand on
décide de retirer un élément du Combobox, ou d'en ajouter un.



"Julie" a écrit dans le message de
news:
bonjour

j'ai une liste déroulante ( ComboVilles ) dans un userform et
lorsque

je sélectionne le 1er index de la liste déroulante ( ComboVilles )
et

que je clique sur le bouton VALIDER, j'ai bien mon égalité, par
contre

si je sélectionne les suivants, la valeur de ma liste déroulante (
ComboVilles )

n'est plus égale à la liste " Villes " et elle s'ajoute
indéfiniment.

Or j'aimerai que chacunes des valeurs soient égales

Comment faire et quelle est la solution avec mon code ci-dessous ?

sur feuille nommée " donnees " j'ai en colonne C
C1 Villes -- en titre Villes
ÞCALER(donnees!$C$2;;;NBVAL(donnees!$C:$C)-1;)

C2 Paris
C3 Nice
C4 Lille
etc...

voici le code :

Private Sub UserForm_Initialize()
ComboVilles.RowSource = "donnees!Villes"
ComboVilles.ListIndex = 0 ' Paris
End Sub

' bouton valider
Private Sub BtnValider_Click()
With ComboVilles
ValeurComboVilles = ComboVilles.Value
ValeurDonneeListe = Range("donnees!C2").Value

' si égalité
If ValeurComboVilles = CStr(ValeurDonneeListe) Then
' si valeur deja dans ValeurDonneeListe , on ne fait
rien

' on évite d'ajouter des doublons dans ValeurDonneeListe
msgBox ("value is in list " + CStr(ValeurDonneeListe))

Else

' msgBox ("donnee abs")
' si valeur absente dans ValeurDonneeListe , on l'
ajoute

Range("donnees!C2").End(xlDown).Offset(1, 0).Value ComboVilles.Value

'tri de la liste
Sheets("donnees").Activate
Range("Villes").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending,
Header:=xlNo, _

OrderCustom:=1, Orientation:=xlTopToBottom
' réafficher la feuille
Sheets("clients").Activate
End If
End With
End Sub

Résultat :
là, j'ai la valeur " Paris " de ( ComboVilles ) qui est égale
à ma liste "Villes, C2 Paris" par contre si je sélectionne
Nice dans la liste déroulante ComboVilles, ma liste
" Villes " est égale à " Paris " ainsi de suite

Comment faire pour que chaque valeur de ComboVilles
soit égale à la liste " Villes " ?

Merci pour votre aide

JULIE




Avatar
Julie
| Si tu te sers de ta plage feuille de calcul uniquement pour alimenter
| ton ComboBox, tu peux utiliser à la place des fichiers textes pour
| "mémoriser" ta liste de villes et alimenter ton ComboBox:

Merci mais le fichier texte externe ne résoud pas mon souci d'égalité
de plus ce fichier xls au final sera partagé sur notre réseau
et pour éviter toute erreur, on préfère que les données
restent dans le xls.

Ya t-il une autre alternative pour
Villes ÞCALER(donnees!$C$2;;;NBVAL(donnees!$C:$C)-1;) ?

Merci

JULIE
Avatar
Daniel.M
Salut Julie,

Si j'ai compris, il faut :
1: Que tu récupères la valeur du texte choisi dans le combobox
2: Que tu vérifies si ce texte n'est pas déjà inscrit dans la plage Villes


Private Sub BtnValider_Click()
Dim res as Variant

With ComboVilles
res = Application.Match(.Value, Range("Villes"),0)

If IsError(res) Then ' pas trouvé
' code lorsque donnée nouvelle, i.e. absente dans la liste
Else ' trouvé à la position res dans Villes
' code lorsque donnée présente dans la liste
End If


End With

End Sub

Salutations,

Daniel M.