VBA Excel Pb affichage ComboBox If

Résolu/Fermé
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 3 sept. 2010 à 11:23
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 3 sept. 2010 à 14:20
Bonjour,
Je fais appel à vous ce jour pour une bizarrerie VBA sous Excel (testé sous 2003).
Je souhaite que s'affiche, dans une Combo de mon USF, le nom des feuilles du classeur, mises à part 3 de ces feuilles...
Ma grande question du jour est pourquoi?
Pourquoi ce code affiche tout de même "Feuil1", "Facture" et "Devis" dans la ComboBox :

Private Sub UserForm_Initialize()
Dim Ws As Worksheet
ComboBox1.Clear
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name <> "Feuil1" Or Ws.Name <> "Facture" Or Ws.Name <> "Devis" Then
            ComboBox1.AddItem Ws.Name
        End If
    Next Ws
End Sub


Alors qu'avec ce code les feuilles non désirées ne s'affichent pas :

Private Sub UserForm_Initialize()
Dim Ws As Worksheet
ComboBox1.Clear
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name = "Feuil1" Or Ws.Name = "Facture" Or Ws.Name = "Devis" Then
        Else
            ComboBox1.AddItem Ws.Name
        End If
    Next Ws
End Sub


J'ai donc trouvé ma solution, mais je cherche tout de même à comprendre.
Merci d'avance.
A voir également:

3 réponses

Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Mike-31 le 3/09/2010 à 11:43
Salut,

Dans ton deuxième code tu écris si le nom de la feuille est égale à = "Feuil1" ne pas afficher

alors que dans le premier code s'il est différent <> "Feuil1" ne pas afficher donc Feuil1 s'affiche ainsi que "Facture" "Devis" sauf les autres feuilles, ce qui n'est pas normal c'est qu'elles s'affichent

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
3 sept. 2010 à 11:41
Salut Mike,
Non dans le premier, j'indique bien : Si <> "Feuil1" alors afficher... C'est bien là le "souci".
1er code :
If Ws.Name <> "Feuil1" Or Ws.Name <> "Facture" Or Ws.Name <> "Devis" Then
        ComboBox1.AddItem Ws.Name
End If
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
3 sept. 2010 à 12:24
Bonjour,

A la place de "Or", essaie "And"....

Bonne journée
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 3/09/2010 à 12:50
Salut cousin...
Ca fonctionne bien avec "And".
Je répète alors ma question, puisque l'on a avancé, pourquoi ce code ne fonctionne pas avec "Or"?
Au niveau de la syntaxe tout semble correct : Si...Ou...Ou...Alors.

EDIT : pas bien réveillé... Désolé, je retire ma question... Il est vrai que comme le nom de ma feuille "Feuil1" est différent de "Facture" alors, comme le test se fait avec "ou", il est normal d'ajouter à la combo...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
3 sept. 2010 à 14:20
Merci CousinHub
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
3 sept. 2010 à 13:34
Re,

Pour ma part, je préfére ce code

Private Sub UserForm_Initialize()
sauf = "Feuil1,Facture,Devis,"
For i = 1 To Sheets.Count
If InStr(sauf, Sheets(i).Name & ",") = 0 Then ComboBox1.AddItem Sheets(i).Name
Next i
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
3 sept. 2010 à 14:20
Re,
Merci Mike, en effet ça semble logique quand on le voit.
A+
0