VBA problème fonction for et if

Fermé
vans7k - 29 juin 2010 à 14:15
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 - 29 juin 2010 à 23:10
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 dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 juin 2010 à 14:27
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
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
29 juin 2010 à 14:28
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
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
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
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
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 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
29 juin 2010 à 23:10
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