Msg box clic annuler fait planter la macro

Bonjour à tous,

Je vous présente ma macro qui permet d'incrémenter des champs dans une feuille afin de constituer un duplicata facture.

Les données facture étant stockées dans un tableau, il suffit d'indiquer dans la msg box le N° de facture pour que le reste suive.

Tous se passe bien jusqu'au cas suivant :

"je me suis trompé et appuis donc sur l'option "ANNULER"".

Excel mouline pendant de longue minute et crash.

Je ne sait pas où placer mon "exit sub" si on appuis sur le bouton annuler.

Pouvez-vous me donner un coup de pouce ?

Macro :

Sub DUPLICATA_FACTURE()

'********************************
'Procédure permettant d'incrémenter automatiquement
'LE DUPLICATA FACTURE depuis la saisie du N° FACTURE
'********************************

Dim Ncode As String
Ncode = InputBox("Saisir le N° de la facture à dupliquer :", "DUPLICATA FACTURE")

Dim ligne As Integer
For ligne = 7 To 500

    If Sheets("TABfacture").Cells(ligne, 7) = Ncode Then

    Sheets("FACTURATION DUPLICATA").Range("I4").Value = Sheets("TABfacture").Cells(ligne, 2)
    Sheets("FACTURATION DUPLICATA").Range("H12").Value = Sheets("TABfacture").Cells(ligne, 3)
    'Sheets("FACTURATION DUPLICATA").Range("H12").Value = Sheets("TABfacture").Cells(ligne, 4)
    'Sheets("FACTURATION DUPLICATA").Range("H12").Value = Sheets("TABfacture").Cells(ligne, 5)
    'Sheets("FACTURATION DUPLICATA").Range("H12").Value = Sheets("TABfacture").Cells(ligne, 6)
    Sheets("FACTURATION DUPLICATA").Range("H4").Value = Sheets("TABfacture").Cells(ligne, 7)
    Sheets("FACTURATION DUPLICATA").Range("I3").Value = Sheets("TABfacture").Cells(ligne, 8)
    Sheets("FACTURATION DUPLICATA").Range("K44").Value = Sheets("TABfacture").Cells(ligne, 9)
    Sheets("FACTURATION DUPLICATA").Range("K43").Value = Sheets("TABfacture").Cells(ligne, 10)
    Sheets("FACTURATION DUPLICATA").Range("K42").Value = Sheets("TABfacture").Cells(ligne, 11)
    Sheets("FACTURATION DUPLICATA").Range("I39").Value = Sheets("TABfacture").Cells(ligne, 12)
    Sheets("FACTURATION DUPLICATA").Range("G43").Value = Sheets("TABfacture").Cells(ligne, 13)
    Sheets("FACTURATION DUPLICATA").Range("F12").Value = Sheets("TABfacture").Cells(ligne, 14)
    Sheets("FACTURATION DUPLICATA").Range("G47").Value = Sheets("TABfacture").Cells(ligne, 15)
    Sheets("FACTURATION DUPLICATA").Range("K50").Value = Sheets("TABfacture").Cells(ligne, 16)

    End If
Next ligne

End Sub

Dans l'attente de vous lire , je vous souhaite une agréable journée.

Amicalement,

Alex.

Bonjour,

lorsque tu appuies sur "Annuler" inputbox retourne False. Tu dois donc vérifier que la valeur retourné est différente de False sinon "exit sub"

if nCode = False then exit sub 

Juste après l'appel à l'inputbox

Cordialement

Bonjour Vince,

Merci pour ta réponse rapide. J'ai bien compris ce que tu as dit.

En revanche, j'ai placé ta ligne après l'appel de la msg box et... je bloque. Je n'arrive pas à faire fonctionner.

Erreur d'exécution '5 :

Argument ou appel de procédure incorrect.

Sub DUPLICATA_FACTURE()

'********************************
'Procédure permettant d'incrémenter automatiquement
'LE DUPLICATA FACTURE depuis la saisie du N° FACTURE
'********************************

Dim Ncode As String
Ncode = InputBox("Saisir le N° de la facture à dupliquer :", "DUPLICATA FACTURE")

if NCode = False then exit sub 

Dim ligne As Integer
For ligne = 7 To 500

    If Sheets("TABfacture").Cells(ligne, 7) = Ncode Then

                (....)

    End If
Next ligne

End Sub

Dsl pour mon incompétence.

Alex.

C'est moi qui m'excuse c'est :

if nCode = "" then exit sub

que tu dois mettre

C'est excellent, ta solution fonctionne !

Merci beaucoup.

Au passage, à force de travailler dessus, j'aimerais ajouter la condition suivante :

Inputbox recherche le numéro de facture dans la colonne du tableau facture...

Si il existe la macro incréments le duplicata facture avec les données du tableau correspondantes.

Si je veux annuler : j'appuie sur annuler et tu as réglé mon problème

Et si le numéro n'existe pas...

J'aimerais mettre une msgbox "le N° de la facture n'existe pas. Vérifiez votre saisie"

Pourrais tu me guider à quelle moment je dois placer cette condition "IF" ? Comment traduire "Si le N° n'existe pas" en VBA.

J'ai tester :

"If" le N° est trouver "THEN"

applique la macro

Else : msg box("vérifiez votre saisie...") exit sub

Mais même si le N° existe, il passe directement à la msgbox et quitte la sub...

Est ce que je dois imbriquer des "IF"?

Merci encore pour ton aide.

Au plaisir de te lire.

Alex.

Re,

comment fais-tu ton " "If" le N° est trouver "THEN" " ?

un exemple :

nCode = inputbox(.....)

if " le N° n'est pas trouver then "  'à remplacer par ce que tu utilises
    msgbox "Numéro introuvable" 'On affiche le msg
    DUPLICATA_FACTURE() 'On rappelle la même procédure pour recommencer et afficher de nouveau l'inputbox
end if

Re,

Voici comment j'ai agencé mon block if. Mais ça ne fonctionne pas.

Aurais-tu une solution à me proposer stp.

Sub DUPLICATA_FACTURE()
'********************************
'Procédure permettant d'incrémenter automatiquement
LE DUPLICATA FACTURE depuis la saisie du N° FACTURE
'********************************

Dim Ncode As String
Dim ligne As Integer

Ncode = InputBox("Saisir le N° de la facture à dupliquer :", "DUPLICATA FACTURE")
If Ncode = "" Then Exit Sub     'permet de quitter la sub si on appuis sunr CANCEL (car inputbox est vide)

For ligne = 13 To 1000

'Voici le bloc IF que je n'arrive pas à gérer

        If Sheets("TABfacture").Cells(ligne, 7) = Ncode Then 'Si on trouve le N° taper dans inputbox dans la colonne alors….
        (…) 'corps de la sub
        Else: MsgBox ("Ce N° de facture n'existe pas. Vérifier votre saisie.") 'Sinon affiche le msg
        Exit Sub 'et quitte la sub
        End If

Next ligne

Sheets("FACTURATION DUPLICATA").Select
End Sub

Merci beaucoup.

Alex.

Re,

essaye ça plutot

Ncode = InputBox("Saisir le N° de la facture à dupliquer :", "DUPLICATA FACTURE")
If Ncode = "" Then Exit Sub

present = false
For ligne = 13 To 1000
    If Sheets("TABfacture").Cells(ligne, 7) = Ncode Then
        present = true
    end if 
next ligne

if present = false
    msgbox "Numéro introuvable" 'On affiche le msg
    DUPLICATA_FACTURE() 'On rappelle la même procédure pour recommencer et afficher de nouveau l'inputbox
    exit sub
end if

On fait le tour du fichier, si il ne trouve pas nCode dans la liste alors present = false et il affiche le message puis recommence la focntion.

Vince,

Je viens de tester ton code... Et ça fonctionne parfaitement.

Après, je vous avoue ne pas tous comprendre (le coup de présent false / True)....

Merci pour votre investissement et votre altruisme.

Au plaisir de correspondre de nouveau avec vous.

Alex.

If Sheets("TABfacture").Cells(ligne, 7) = Ncode Then
        present = true
end if
 

Cette partie va aller stocker dans la variable présent la valeur True si nCOde est bien présent dans la colonne 7. Par défaut la valeur est à false, on sait donc que après ce code, si NCode est present alors present = true sinon present = false.

Re,

Super, merci pour cette explication.

Au plaisir,

Alex.

Pour tous ceux qui ont suivis le fil de ce topic.

Voici un petit fichier avec la macro fonctionnelle.

Il vous suffira de l'adapter à vos besoins.

A bientôt.

Alex.

Rechercher des sujets similaires à "msg box clic annuler fait planter macro"