VBA problème fonction for et if

vans7k -  
eriiic Messages postés 24603 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

A voir également:

6 réponses

lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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