Boucle For/Condition If après un InputBox [Résolu/Fermé]

Signaler
-
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
-
Bonjour,

J'ai un soucis, J'ai un problème sur mon problème mais je ne vois pas ce problème.

Sub MAJ_Tab()
Equipe = InputBox("Dans quelle équipe ?" & Chr(10) & Chr(10) & "1-Equipe Xavier" & Chr(10) & "2-Equipe Olivier", "Qui a été formé", "Veuillez saisir le numéro de l'équipe de l'opérateur formé")
If Equipe = 1 Then
    b = 0
   <gras> Form = InputBox("Qui a été formé récemment ?" & Chr(10) & Chr(10) & "1-" & Cells(1, 3) & Chr(10) & "2-" & Cells(1, 4) & Chr(10) & "3-" & Cells(1, 5) & Chr(10) & "4-" & Cells(1, 6) & Chr(10) & "5-" & Cells(1, 7) & Chr(10) & "6-" & Cells(1, 8) & Chr(10) & "7-" & Cells(1, 9) & Chr(10) & "8-" & Cells(1, 10) & Chr(10) & "9-" & Cells(1, 11) & Chr(10) & "10-" & Cells(1, 12), "Opérateur formé", "Entrer le numéro de l'opérateur formé")
    For i = 1 To 10
        If Form = i Then  'pk ça ne marche pas</gras>
            a = 0
            Poste = InputBox("Sur quel poste a t-il été formé ?", "Quelle formation", "Veuillez indiquer le nom du poste comme indiqué dans le tableau")
            For j = 2 To 18
                If Poste = Cells(j, 1) Then
                    Niveau = InputBox("A quel niveau a t'il été formé" & Chr(10) & Chr(10) & "1-Niveau qualifié" & Chr(10) & "2-Niveau professionnel" & Chr(10) & "3-Niveau expert", "Niveau de formation", "Indiquer par 1,2 ou 3 le niveau de formation")
                    If Niveau = 1 Then
                        Cells(j, 3) = 1
                    Else
                        If Niveau = 2 Then
                            Cells(j, 3) = 2
                        Else
                            If Niveau = 3 Then
                                Cells(j, 3) = 3
                            Else
                                Erreur1 = MsgBox("Ce niveau n'existe pas", vbExclamation, "Recommencez")
                            End If
                        End If
                    End If
                Else
                    a = a + 1
                    If a = 17 Then
                        Erreur2 = MsgBox("Ce poste n'existe pas ou ne correspond pas à l'orthographe du tableau", vbExclamation, "Recommencez")
                    End If
                End If
            Next
        Else
            b = b + 1
            If b = 10 Then
                Erreur3 = MsgBox("Cet opérateur n'existe pas", vbExclamation, "Recommencez")
            End If
        End If
    Next
Else





Voilà la partie qui ne fonctionne pas est en gras. Malgrés que je rentre un chiffre entre 1 et 10 dans la inputbox "form" je n'arrive pas à passer cette condition "form=i", je reçois directement mon message "erreur3".

Pouvez vous me dire où ai-je fais une erreur svp ?

Merci d'avance

14 réponses

Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
Bonjour,

Tu as essayer de forcer manuellement dans un premier temps?
Essaye ça et regarde si tu vas toujours dans l'erreur3.
Oui j'ai essayé en retirant ma boucle for i= et en mettant if form=1 et dans ce cas ça fonctionne bien. Ca ne fonctionne pas uniquement quand je rajoute ma boucle for mais j'ai besoin d'une boucle pour vérifier tous les cas. Je ne peux pas me permettre de faire une condition If pour chacune des réponses inputbox possible :/
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
Je ne vois nul part la déclaration de la variable I, ça doit être ça ton erreur
Je ne les déclare jamais et pourtant je n'ai jamais eu de soucis. Comment devrais-je la déclarer dans ce cas ?
dim i as variant ?
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
Dim a as Byte vu que c'est un nombre compris entre 0 et 255.
Variant est bien si tu ne sais pas quelle place prendra ta variable.
Le vba est un script donc c'est mieux de l'optimiser pour privilégier la vitesse.
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2250
Bonjour,

Une inputbox retourne un String, donc "1", "2" etc... qui sera forcément différent de 1, 2 etc
Essaye ce test :
Sub test()
Form = InputBox("Qui a été formé récemment ?" & Chr(10) & Chr(10) & "1-" & Cells(1, 3) & Chr(10) & "2-" & Cells(1, 4) & Chr(10) & "3-" & Cells(1, 5) & Chr(10) & "4-" & Cells(1, 6) & Chr(10) & "5-" & Cells(1, 7) & Chr(10) & "6-" & Cells(1, 8) & Chr(10) & "7-" & Cells(1, 9) & Chr(10) & "8-" & Cells(1, 10) & Chr(10) & "9-" & Cells(1, 11) & Chr(10) & "10-" & Cells(1, 12), "Opérateur formé", "Entrer le numéro de l'opérateur formé")
    For i = 1 To 10
        If Form = CStr(i) Then
            MsgBox "Condition vérifiée valeur : " & i
        End If
    Next
End Sub


Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
J'ai testé en mettant "dim i as Byte" et maintenant ça fonctionne !
Merci pour votre aide.
Ca m'apprendra à pas déclarer mes variables.
Bonne fin de journée à vous
Oui mais pourtant si tu regarde la inputbox qui suit et l'autre boucle for, je n'est pas déclaré ma variable j et pourtant ça fonctionne bien. Depuis hier je me casse la tête pour ça j'aurais du venir direct ici :).
Après les déclarations de variables je gère pas du tous je sais jamais trop comment déclarer ^^
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
http://www.excel-pratique.com/fr/vba/variables.php
Utilise ça.
N'utilise le variant qu'en dernier recours.
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
Si tu ne déclare pas une variable, Excel la déclare en variant. Il a dû la mettre en String après puis dans ta comparaison tu le compare à un nombre et il ne pouvait pas le faire.
Pour ça qu'on déclare toujours ses variables.
Je m'en souviendrais.
Encore merci de ton aidé et de la rapidité
Pierre1310
Messages postés
8649
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
6 juillet 2019
375
Pas de soucis, bonne continuation.