[VBA] If...If Not...End If

Bonjour,

J'ai un message d'erreur classique "Bloc If sans End If", j'ai beau essayer différentes choses, je ne parviens pas à structurer le paragraphe comme il le souhaite :

Private Sub B_Valid_Click()

' Controle que les champs essentiels du formulaire des entrées aient été bien remplis

    If Len(Me.TextBox9) = 0 Then
        MsgBox "Impossible de valider, vous n'avez pas rempli le champ Produit"
        Exit Sub

        ElseIf Len(Me.TextBox1) = 0 Then
        MsgBox "Impossible de valider, vous n'avez pas rempli le champ Quantité"
        Exit Sub

        ElseIf Len(Me.TextBox5) = 0 Then
        MsgBox "Impossible de valider, vous n'avez pas rempli le champ Prix Total de la commande"
        Exit Sub

        ElseIf Len(Me.TextBox7) = 0 Then
        MsgBox "Impossible de valider, vous n'avez pas rempli le champ Prix Unitaire"
        Exit Sub

    End If

' Controle que les champs nombres soient bien des valeurs numériques

    If Not IsNumeric(TextBox1.Text) Then
        MsgBox "Impossible de valider, erreur sur le champ Quantité saisie"
        Exit Sub

        If Not IsNumeric(TextBox5.Text) Then
        MsgBox "Impossible de valider, erreur sur le champ Prix total de la commande"
        Exit Sub

        If Not IsNumeric(TextBox1.Text) Then
        MsgBox "Impossible de valider, erreur sur le champ Prix Unitaire saisie"
        Exit Sub

    End If

'...et passer à la suite, au traitement du formulaire

   ' Positionnement dans la base STOCKS
   ligne = Sheets("STOCKS").[a65000].End(xlUp).Row + 1
   ' Transfert Formulaire dans STOCKS
   Sheets("STOCKS").Cells(ligne, 1) = Me.TextBox9 'Recopie Désignation du Produit
   Sheets("STOCKS").Cells(ligne, 2) = CDbl(Me.TextBox1) 'Recopie Quantité produit (accepte qu'un nombre)
   ...patati patata...

End Sub

Comme il y a bien des End If, je pense que mon code en langage petit-chinois (je fais ce que je peux ) doit manquer de liant logique après les 2 contrôles pour passer à la suite, je pense qu'il doit manquer un Else pour lui dire de poursuivre la fonction, mais malgré différentes tentatives, je n'y parviens pas, un truc doit m'échapper.

Voyez vous où est mon erreur ?

(c'est la page "sortie", USF_C si jamais ça a une importance)

Bonjour

Il faut autant de End If que de conditions If

Cordialement

Merci pour votre aide, malheureusement même avec votre réponse je n'y arrive pas, j'ai essayé plein de structures :

Test 1/

If

  • -Else If
  • -Else If
  • -Else If
End If

If Not

  • -If Not
  • -If Not
  • -If Not
End If

Test 2/

If

  • -Else If
  • -Else If
  • -Else If
End If

If Not

End If

--If Not

End If

--If Not

End If

Test 3/

If

  • -Else If
  • -Else If
  • -Else If
Else

If Not

Else

--If Not

Else

--If Not

End If

Et je passe une bonne dizaine d'autres essais. Je sèche...

Bonjour Cricri19, Amadéus

Effectivement toujours autant de IF que de ENDIF

Perso je n'aime pas trop ElseIf et j'évite les Exit Sub autant que possible !

Voici donc une idée de formulation de code à tester !

    If Len(Me.TextBox9) = 0 Then
        MsgBox "Impossible de valider, vous n'avez pas rempli le champ Produit"
    Else
        If Len(Me.TextBox1) = 0 Then
            MsgBox "Impossible de valider, vous n'avez pas rempli le champ Quantité"
        Else
            If Len(Me.TextBox5) = 0 Then
                MsgBox "Impossible de valider, vous n'avez pas rempli le champ Prix Total de la commande"
            Else
                If Len(Me.TextBox7) = 0 Then
                    MsgBox "Impossible de valider, vous n'avez pas rempli le champ Prix Unitaire"
                End If
            End If
        End If
    End If

Maintenant si ça ne tourne toujours pas, parfois il est utile de tourner les tests dans l'autre sens :

If Not(condition) Then
[tab]actionNonCondition[/tab]
Else
[tab]actionCondition[/tab]
End If

Attention je n'ai pas tester ton code !


Attention je n'ai pas testeré ton code !

J'ai fait un mélange des 2 solutions et après quelques essais, ça marche, merci beaucoup Andréa !

Edit: Ma 1re vague de contrôle suit ton 1er code, et ma seconde vague de contrôle j'ai reformulé selon ta 2ème proposition.

Bonjour Cricri19, tous

Cricri19 a écrit :

merci beaucoup Andréa !

Egalement heureux d'avoir contribué à la résolution de ton problème

Pour informations qu'est-ce que tu veux dire par

Cricri19 a écrit :

J'ai fait un mélange des 2 solutions

?

(re)

Ok pour le "shaker à solutions"

Effectivement souvent il faut "mixer" pour que ça passe mieux !

Plus sérieusement ... à mon avis...

Les tests devraient toujours pouvoir se lire d'une seule traite et de manière logique (pour l'homme) pas celle de l'ordinateur !

Par exemple "homme" ne connait pas Exit Sub ! donc il faut trouver le moyen de faire autrement ! Ce n'est pas toujours possible dirons certains ! Mais par exemple

Il faut essayer au maximum "d'écrire" en langage naturel, cela permet de formuler les tests "comme on parle" ! et souvent même faire un petit dessin ou un organigramme (si l'on sait faire) pour schématiser le problème...

Rechercher des sujets similaires à "vba end"