Boucle For/Condition If après un InputBox

Résolu/Fermé
GouduriXx - 25 févr. 2016 à 15:30
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 - 25 févr. 2016 à 16:25
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
A voir également:

3 réponses

Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
25 févr. 2016 à 15:35
Bonjour,

Tu as essayer de forcer manuellement dans un premier temps?
Essaye ça et regarde si tu vas toujours dans l'erreur3.
0
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 :/
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
25 févr. 2016 à 15:53
Je ne vois nul part la déclaration de la variable I, ça doit être ça ton erreur
0
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 ?
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
25 févr. 2016 à 15:57
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 25/02/2016 à 15:58
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
0
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
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
Modifié par Pierre1310 le 25/02/2016 à 16:07
De même. Hésite pas à utiliser le mode pas à pas + les espions, une très grande aide.
Le problème est que tu faisais un test sur une variable qui n'existait pas donc forcément il ne pouvait pas comparer et allait directement dans le sinon :)
0
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 ^^
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
25 févr. 2016 à 16:16
https://www.excel-pratique.com/fr/vba/variables.php
Utilise ça.
N'utilise le variant qu'en dernier recours.
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
25 févr. 2016 à 16:18
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.
0
Je m'en souviendrais.
Encore merci de ton aidé et de la rapidité
0