VBA Excel Pb affichage ComboBox If

Résolu
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -  
pijaku Messages postés 13513 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.
--
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

3 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  2. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383
     
    Bonjour,

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

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