VBA problème fonction for et if

vans7k -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Petit problème avec cette fonction quan j'execute le programme il me met comme erreur pas de else sans if mais quand je rajoute if ça ne marche pas non plus au secours je ne sais plus quoi faire !!!

Voici mon code :

NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text
Load UserForm1
UserForm1.Show
Unload UserForm1
For NumPersonne = 1 To (NombrePersonne)

If Sheets("pieces").Cells(2, NumPersonne + 4) = "N" Then UserForm1.Label1.Visible = True
Else: UserForm1.Label1.Visible = False
If Sheets("pieces").Cells(2, NumPersonne + 5) = "N" Then UserForm1.Label2.Visible = True
Else: UserForm1.Label2.Visible = False
If Sheets("pieces").Cells(4, NumPersonne + 6) = "N" Then UserForm1.Label3.Visible = True
Else: UserForm1.Label3.Visible = False
End If
End If
End If

UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 3).Value
Load UserForm1
UserForm1.Show

Next NumPersonne

Merci

Vanessa

6 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    en premier, tu auras toujours une erreur puisque tu referme ton UserForm...
    UserForm1.Show 
    Unload UserForm1  ..... ????

    Et sans connaître les conditions que tu veux déterminer le code devrait avoir un aspect dans ce genre...
        If Sheets("pieces").Cells(2, NumPersonne + 4) = "N" Then
            UserForm1.Label1.Visible = True
        ElseIf UserForm1.Label1.Visible = False Then
            If Sheets("pieces").Cells(2, NumPersonne + 5) = "N" Then
                UserForm1.Label2.Visible = True
            ElseIf UserForm1.Label2.Visible = False Then
                If Sheets("pieces").Cells(4, NumPersonne + 6) = "N" Then
                    UserForm1.Label3.Visible = True
            Else
                UserForm1.Label3.Visible = False
            End If
        End If

    A+
    si tu ne veux pas que l'UF soit visible si certaines condition ne sont pas remplie tu peu mettre l'UF Hide, soit à la place de..
    UserForm1.Show 
    Unload UserForm1

    Mettre..
        UserForm1.load

    Et de plus, tes conditions ne vont pas dans une boucle, du moins d'après ce que je peu voir au premier abord.
    A+
    0
    1. vans7k
       
      Autant pour moi j'ai quand même un bug ! Pour la deuxième personne ça fonctionne bien mais pour la première il ne m'affiche toujours rien ! Les données commence à la ligne 2 et les pieces se trouve en colonne 6,7 et 8.

      Voici mon code :
      Sub Pieces()
      Dim section
      Dim Reponse

      NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text

      For NumPersonne = 1 To (NombrePersonne)

      If Sheets("pieces").Cells(NumPersonne + 1, 6) = "N" Then
      UserForm1.Label1.Visible = True
      If Sheets("pieces").Cells(NumPersonne + 1, 7) = "N" Then
      UserForm1.Label2.Visible = True
      If Sheets("pieces").Cells(NumPersonne + 1, 8) = "N" Then
      UserForm1.Label3.Visible = True
      End If
      End If
      End If

      UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 4).Value
      Load UserForm1
      UserForm1.Show

      Next NumPersonne
      End Sub
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonnjour,

    tes end if sont mal placés

    If Sheets("pieces").Cells(2, NumPersonne + 4) = "N" Then UserForm1.Label1.Visible = True
    Else: UserForm1.Label1.Visible = False
    end if
    ....
    0
  3. vans7k
     
    Bonjour

    tout d'abord merci de m'avoir répondu ;) J'ai effectué les modifications comme vous me l'avez dit, cependant un problème persiste. Dans mes données les cellules contiennent bien "N" et dans l'UserForm rien ne s'affiche !! je remet mon code j'ai peut-être oublier qqch ! Merci d'avance

    Sub Pieces()
    NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text
    If Sheets("pieces").Cells(2, NumPersonne + 5) = "N" Then
    UserForm1.Label1.Visible = True
    ElseIf UserForm1.Label1.Visible = False Then
    If Sheets("pieces").Cells(2, NumPersonne + 6) = "N" Then
    UserForm1.Label2.Visible = True
    ElseIf UserForm1.Label2.Visible = False Then
    If Sheets("pieces").Cells(4, NumPersonne + 7) = "N" Then
    UserForm1.Label3.Visible = True
    Else
    UserForm1.Label3.Visible = False
    End If
    End If
    End If
    For NumPersonne = 1 To (NombrePersonne)

    UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 4).Value
    Load UserForm1
    UserForm1.Show

    Next NumPersonne

    Reponse = MsgBox("Voulez vous enregistrer les modifications", vbQuestion & vbYesNo, "Sauvegarde")
    If Reponse = vbYes Then Application.ActiveWorkbook.Save

    End Sub
    0
  4. vans7k
     
    Re j'ai remodifier mon code ça marche presque mais j'ai encore un petit soucis dans le test avec if. J'ai trois colonnes à tester si elle contiennent "N" le label correspondant doit etre visible dans le USerForm malheureusement celà ne marche que pour ma première colonne et je ne vois pas du tt pourquoi !! merci de m'aider si vous pouvez ;).

    Le code :
    Sub Pieces()
    Dim section
    Dim Reponse

    NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text

    For NumPersonne = 1 To (NombrePersonne)

    If Sheets("pieces").Cells(NumPersonne + 1, 6) = "N" Then
    UserForm1.Label1.Visible = True
    ElseIf Sheets("pieces").Cells(NumPersonne + 1, 7) = "N" Then
    UserForm1.Label2.Visible = True
    ElseIf Sheets("pieces").Cells(NumPersonne + 1, 8) = "N" Then
    UserForm1.Label3.Visible = True
    Else
    End If

    UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 4).Value
    Load UserForm1
    UserForm1.Show

    Next NumPersonne
    Reponse = MsgBox("Voulez vous enregistrer les modifications", vbQuestion & vbYesNo, "Sauvegarde")
    If Reponse = vbYes Then Application.ActiveWorkbook.Save

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vans7k
     
    Re lol je viens de trouver la réponse !! c'était tout bête mais bon lol
    Voici la solution pour ceux que ça interesse :

    Sub Pieces()
    Dim section
    Dim Reponse

    NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text

    For NumPersonne = 1 To (NombrePersonne)

    If Sheets("pieces").Cells(NumPersonne + 1, 6) = "N" Then
    UserForm1.Label1.Visible = True
    If Sheets("pieces").Cells(NumPersonne + 1, 7) = "N" Then
    UserForm1.Label2.Visible = True
    If Sheets("pieces").Cells(NumPersonne + 1, 8) = "N" Then
    UserForm1.Label3.Visible = True
    Else
    End If
    End If
    End If

    UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 4).Value
    Load UserForm1
    UserForm1.Show

    Next NumPersonne
    End Sub

    Voilà mais je n'aurais pas trouvé si vous n'aviez pas été là merci !! et vive les forums !!!!
    0
  7. vans7k
     
    Problème résolu voici la solution :

    Sub Pieces()
    Dim section
    Dim Reponse

    NombrePersonne = ActiveWorkbook.Sheets("pieces").Range("NbPersonne").Text

    For NumPersonne = 1 To (NombrePersonne)

    If Sheets("pieces").Cells(NumPersonne + 1, 6) = "N" Then
    UserForm1.Label1.Visible = True
    Else
    End If
    If Sheets("pieces").Cells(NumPersonne + 1, 7) = "N" Then
    UserForm1.Label2.Visible = True
    Else
    End If
    If Sheets("pieces").Cells(NumPersonne + 1, 8) = "N" Then
    UserForm1.Label3.Visible = True
    Else
    End If

    UserForm1.Caption = Sheets("pieces").Cells(NumPersonne + 1, 4).Value
    Load UserForm1
    UserForm1.Show

    Next NumPersonne
    End Sub

    Merci ++
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonsoir,

      Peut-être pas genant dans ton programme mais tu ne le remets pas à false si test négatif comme montré dans l'exemple de michel.
      Traiter les 2 cas de façon plus courte :
      UserForm1.Label1.Visible = (Sheets("pieces").Cells(NumPersonne + 1, 6) = "N")
      .Visible prendra la valeur du résultat de ton test (les if then ne sont plus nécessaires)

      eric
      0