Boucle avec InputBox

Bonjour à tous

je suis nouveau sur le forum et débutant en VBA, je souhaiterais automatiser la création de factures clients.

Ma première étape serait de coder cet algo : j'essaye depuis plusieurs jours...

Ouvrir une boite de saisie1

Contrôle : si appui sur bouton ok sans saisie alors rien

Si appui sur annuler alors sortir de la macro

Si la valeur rentrée est égale à 0 ou différente d'un nombre entier

Alors on passe au bloc suivant (autre boite de saisie2)

Sinon message "xxx" et retour à la boite de saisie

Possibilité de sortir avec le bouton annuler

Ecrire le résultat saisi dans la cellule d'une autre feuille

Merci à vous

Bonjour,

Je te présente ci-joint ma jolie contribution.

Il faut cliquer sur l'arbre.

annotation 2020 01 31 122704
22demoinutile.xlsm (43.96 Ko)

Bonjour Oxydum,

merci pour ton aide mais ce n'est pas trop ce que j'attendais

j'étais plus sur un module VBA de type sauf que ca marche pas

(je suis en essai c'est pour cela qu'il y a des apostrophes)

'Do

numfacture = InputBox("Saisissez un numéro chrono", "Référence de facture") ' Présentation d'une zone de saisie pour demander le numéro de la facture à l'utilisateur

'If numfacture = "0" Or IsNumeric(numfacture) = False Then

' If vbCancel Then Exit Sub

'End If

'Loop Until numfacture <> "0" Or IsNumeric(numfacture) = True

'Sheets("SYNTHESE").Range("B5").Value = numfacture

J'avoue parfois c'est moi qui ne comprends rien. Est-ce que tu peux reformuler ton besoin ?

Par exemple :

Je veux pouvoir réaliser un contrôle de saisie de facture selon le classeur ci-joint.

Salut Oxydum,

L'algo me paraissait clair

Je souhaite demander à un utilisateur de renseigner un numéro chrono >0 et entier.

Si l'utilisateur appuie sur ok sans renseigner -> boucle on redemande

Si l'utilisateur clique sur annuler alors on sort de la macro

on verra plus tard pour copier la valeur de la variable dans une autre feuille

merci

Bonjour,

Ce qui est clair pour certains peut être confus pour d'autres

Voici une proposition :

Sub EssaiInput()
Dim iVar As Variant, Ok As Boolean
    Do
        iVar = InputBox("Saisissez un numéro chrono", "Référence de facture")
        If StrPtr(iVar) = 0 Then
            MsgBox "Vous avez annulé", vbCritical + vbOKOnly, "Annulation utilisateur"
            Exit Sub
        ElseIf iVar = vbNullString Then
            MsgBox "Aucune saisie", vbCritical + vbOKOnly, "Pas de saisie utilisateur"
        Else
            If Not IsNumeric(iVar) Then
                MsgBox "Merci de saisir un nombre", vbCritical + vbOKOnly, "Mauvaise saisie utilisateur"
            Else
                Ok = True
            End If
        End If
    Loop While Not Ok
End Sub

Merci pijaku

j'avais réussi qqch hier soir (peut être pas très optimisé come code…):

Do

numfacture = InputBox("Saisissez un numéro chrono", "Référence de facture")

If numfacture = "" Then

Exit Sub

ElseIf IsNumeric(numfacture) = False Then

MsgBox "Saisissez un nombre entier", vbCritical

End If

Loop Until (numfacture <> "" And IsNumeric(numfacture) = True)

il reste quand même un défaut de code : lorsque tu saisis un nombre et un caractère de type "+" ou "-" du clavier numérique cela valide la saisie, une idée ?

Bonjour,

Quelque chose comme ceci.

Sub EssaiInput()
Dim iVar As Variant, Ok As Boolean
    Do
        iVar = InputBox("Saisissez un numéro chrono", "Référence de facture")
        If StrPtr(iVar) = 0 Then
            MsgBox "Vous avez annulé", vbCritical + vbOKOnly, "Annulation utilisateur"
            Exit Sub
        ElseIf iVar = vbNullString Then
            MsgBox "Aucune saisie", vbCritical + vbOKOnly, "Pas de saisie utilisateur"
        Else
            If Not IsNumeric(iVar) Then
                MsgBox "Merci de saisir un nombre", vbCritical + vbOKOnly, "Mauvaise saisie utilisateur"
            ElseIf CInt(iVar) <> iVar Then
                MsgBox "Merci de saisir un nombre entier", vbCritical + vbOKOnly, "Mauvaise saisie utilisateur"
            ElseIf InStr(iVar, "+") Or InStr(iVar, "-") Then
                MsgBox "Merci de saisir un nombre sans signe + ou -", vbCritical + vbOKOnly, "Mauvaise saisie utilisateur"
            Else
                Ok = True
            End If
        End If
    Loop While Not Ok
End Sub

L'avantage de ma méthode est que tu peux y ajouter tous les tests nécessaires ...

Pour le coup, tu pourrais même la "sortir" de ta procédure pour en faire une fonction... Si intéressé, dis le

merci à tous

Rechercher des sujets similaires à "boucle inputbox"