Affichage d'un message avec MsgBox
Dernière réponse : dans Programmation
Bonjour,
j'ai réalisé une macro qui me permet de selectionner des données à partir d'une plage de cellules et les copier dans des plages de cellules bien données;mais à une condition:
La macro vérifie que le numero facture n'existe pas déja:
si oui la macro s'exécute.
Si non la macro ne s'exécute pas et on sort du programme.
La macro marche sans probleme;mais je souhaite que dans le cas où la macro ne s'exécute pas,je veux que la macro affiche ce message à l'écran:"ATTENTION!!! Ce N°_Facture existe déja!" avant de sortir du programme.
Comment faire car j'ai essayé mais je n'arrive pas! voici ce que j'ai trouvé:
Merci de m'aider.
j'ai réalisé une macro qui me permet de selectionner des données à partir d'une plage de cellules et les copier dans des plages de cellules bien données;mais à une condition:
La macro vérifie que le numero facture n'existe pas déja:
si oui la macro s'exécute.
Si non la macro ne s'exécute pas et on sort du programme.
La macro marche sans probleme;mais je souhaite que dans le cas où la macro ne s'exécute pas,je veux que la macro affiche ce message à l'écran:"ATTENTION!!! Ce N°_Facture existe déja!" avant de sortir du programme.
Comment faire car j'ai essayé mais je n'arrive pas! voici ce que j'ai trouvé:
[/cpp]Mon probleme est que le message ne s'affiche pas à l'écran dans le cas où la macro ne s'exécute pas.
Sub Macro1()
'
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+Maj+Z
[cpp]Sheets("Retraitement_relevé").Select
Range("A6:E6").Select
Selection.Copy
Select Case Range("B3").Value
Case 1
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00001").Select
' Définition de la plage a regarder
Dim MaPlage As Range
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
If Cell.Value = Num_Facture Then
MsgBox "ATTENTION!!! Ce N°_Facture existe déja!"
Exit Sub
End If
Next
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Case 2
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00002").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then Exit Sub
Next
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Case 3
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00003").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then Exit Sub
Next
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Select
End Sub
Merci de m'aider.
Autres pages sur : affichage message msgbox
Lassé par la pub ? Créez un compte
Meilleure solution
Salut
pffffffffffffff......
Alors d'abord, présente-nous un code correctement indenté. En l'état, c'est pratiquement illisible.
Ensuite, recherche si la facture existe ou pas avant de commencer la copie.
De plus, inutile de faire toutes ces sélections. Tu sais définir une variable (ligne 17), alors déclare ta source, ta cible, et fais ta copie sans faire de sélection.
Tu fais trois fois la même chose à l'exception du nom de la feuille. Utilise une variable.
A te lire.
pffffffffffffff......
Alors d'abord, présente-nous un code correctement indenté. En l'état, c'est pratiquement illisible.
Ensuite, recherche si la facture existe ou pas avant de commencer la copie.
De plus, inutile de faire toutes ces sélections. Tu sais définir une variable (ligne 17), alors déclare ta source, ta cible, et fais ta copie sans faire de sélection.
Tu fais trois fois la même chose à l'exception du nom de la feuille. Utilise une variable.
A te lire.
zeb a dit :
Salutpffffffffffffff......
Alors d'abord, présente-nous un code correctement indenté. En l'état, c'est pratiquement illisible.
Ensuite, recherche si la facture existe ou pas avant de commencer la copie.
De plus, inutile de faire toutes ces sélections. Tu sais définir une variable (ligne 17), alors déclare ta source, ta cible, et fais ta copie sans faire de sélection.
Tu fais trois fois la même chose à l'exception du nom de la feuille. Utilise une variable.
Bonjour,
Merci pour ton aide car grace à toi et au forum je sens que j'avance petit a petit.
Je viens de voir ta réponse et je vais l'aplliquer,mais avant d'obtenir la réponse j'ai essayé de "regler" mon probleme,La macro marche,mais elle me pose encore des problemes.voici ce que j'ai trouvé:
Sub Impression_Facture()
'
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+Maj+Z
Sheets("Retraitement_relevé").Select
Range("A6:E6").Select
Selection.Copy
Select Case Range("B3").Value
Case 1
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00001").Select
' Définition de la plage a regarder
Dim MaPlage As Range
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If
Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
Case 2
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00002").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If
Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
Case 3
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00003").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If
Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
End Select
End Sub
Mon code marche mais j'ai un probleme:C'est que quand j'exécute la macro,elle marche une fois sur deux;c'est à dire que:
-Premier lancement de la macro : elle marche sans probleme,
-Deuxieme lancement de la macro : elle ne marche pas,mais les évenements suivants se produisent:Le message d'erreur suivant apparait:"Erreur d'exécution '1004',La méthode PasteSpécial de la classe Range a échoué.";ensuite dans la feuille de destination la cellule active est décalée d'une ligne vers le bas.
-Au troisiemme lancement : elle marche comme au premier lancement
-Au quatrieme lancement : elle ne marche pas comme au deuxieme lancement
-Au cinquieme lancement : elle marche comme au premier lancement
-Au sixieme lancement : elle ne marche pas comme au deuxieme lancement
Et ainsi de suite.
Comment éviter le probleme au deuxieme lancement ,pour que la macro marche sans probleme chaque fois qu'on la lance?
Merci de m'aider.
.
Lassé par la pub ? Créez un compte
Si elle ne s'exécute pas, comment veux-tu qu'elle affiche quelque chose ?!!!