VBA Excel Pb affichage ComboBox If

Résolu
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
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 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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   Statut Modérateur Dernière intervention   2 761
 
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 1074 Date d'inscription   Statut Membre Dernière intervention   361
 
Bonjour,

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

Bonne journée
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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   Statut Modérateur Dernière intervention   2 761
 
Merci CousinHub
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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   Statut Modérateur Dernière intervention   2 761
 
Re,
Merci Mike, en effet ça semble logique quand on le voit.
A+
0