Se connecter avec
S'enregistrer | Connectez-vous

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é:

  1. Sub Macro1()
  2. '
  3. ' Macro1 Macro
  4. '
  5. ' Touche de raccourci du clavier: Ctrl+Maj+Z
  6.  
  7. [cpp]Sheets("Retraitement_relevé").Select
  8. Range("A6:E6").Select
  9. Selection.Copy
  10. Select Case Range("B3").Value
  11. Case 1
  12. 'Num_Facture correspond au N° de facture à traiter
  13. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  14. Sheets("00001").Select
  15. ' Définition de la plage a regarder
  16. Dim MaPlage As Range
  17. Set MaPlage = Range("Liste_N°_facture")
  18. ' Boucle + Test si Facture existe déjà
  19. For Each Cell In MaPlage
  20. ValeurCellule = Cell.Value
  21. 'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
  22. If Cell.Value = Num_Facture Then
  23. MsgBox "ATTENTION!!! Ce N°_Facture existe déja!"
  24. Exit Sub
  25. End If
  26.  
  27. Next
  28. ActiveCell.Offset(1, 0).Select
  29. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  30. :=False, Transpose:=False
  31. Application.CutCopyMode = False
  32. Case 2
  33. 'Num_Facture correspond au N° de facture à traiter
  34. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  35. Sheets("00002").Select
  36. ' Définition de la plage a regarder
  37. Set MaPlage = Range("Liste_N°_facture")
  38. ' Boucle + Test si Facture existe déjà
  39. For Each Cell In MaPlage
  40. ValeurCellule = Cell.Value
  41. 'Si Facture trouvée.. on sort du programme
  42. If Cell.Value = Num_Facture Then Exit Sub
  43. Next
  44. ActiveCell.Offset(1, 0).Select
  45. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  46. :=False, Transpose:=False
  47. Application.CutCopyMode = False
  48. Case 3
  49. 'Num_Facture correspond au N° de facture à traiter
  50. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  51. Sheets("00003").Select
  52. ' Définition de la plage a regarder
  53. Set MaPlage = Range("Liste_N°_facture")
  54. ' Boucle + Test si Facture existe déjà
  55. For Each Cell In MaPlage
  56. ValeurCellule = Cell.Value
  57. 'Si Facture trouvée.. on sort du programme
  58. If Cell.Value = Num_Facture Then Exit Sub
  59. Next
  60. ActiveCell.Offset(1, 0).Select
  61. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  62. :=False, Transpose:=False
  63. Application.CutCopyMode = False
  64. End Select
  65. End Sub
[/cpp]Mon probleme est que le message ne s'affiche pas à l'écran dans le cas où la macro ne s'exécute pas.
Merci de m'aider.

Autres pages sur : affichage message msgbox

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

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.
Expert Programmation

Bonjour,
Citation :
...dans le cas où la macro ne s'exécute pas, je veux que la macro affiche ce message...

:??:  Si elle ne s'exécute pas, comment veux-tu qu'elle affiche quelque chose ?!!!

Avant de développer un bout de code, on pose son problème sur papier (à moins d'être "bon")...

zeb a dit :
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.

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é:

  1. Sub Impression_Facture()
  2. '
  3. ' Macro1 Macro
  4. '
  5. ' Touche de raccourci du clavier: Ctrl+Maj+Z
  6.  
  7. Sheets("Retraitement_relevé").Select
  8. Range("A6:E6").Select
  9. Selection.Copy
  10. Select Case Range("B3").Value
  11. Case 1
  12. 'Num_Facture correspond au N° de facture à traiter
  13. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  14. Sheets("00001").Select
  15. ' Définition de la plage a regarder
  16. Dim MaPlage As Range
  17. Set MaPlage = Range("Liste_N°_facture")
  18. ' Boucle + Test si Facture existe déjà
  19. For Each Cell In MaPlage
  20. ValeurCellule = Cell.Value
  21. 'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
  22. If Cell.Value = Num_Facture Then
  23. Application.CutCopyMode = False
  24. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  25. Sheets("Facture").Select
  26. MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
  27. Exit Sub
  28. End If
  29.  
  30. Next
  31. ActiveSheet.Unprotect ("1608")
  32. ActiveCell.Offset(1, 0).Select
  33. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  34. :=False, Transpose:=False
  35. Application.CutCopyMode = False
  36. ActiveSheet.Protect ("1608")
  37. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  38. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  39. Sheets("Facture").Select
  40. ActiveWindow.SelectedSheets.PrintOut Copies:=2
  41. Case 2
  42. 'Num_Facture correspond au N° de facture à traiter
  43. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  44. Sheets("00002").Select
  45. ' Définition de la plage a regarder
  46. Set MaPlage = Range("Liste_N°_facture")
  47. ' Boucle + Test si Facture existe déjà
  48. For Each Cell In MaPlage
  49. ValeurCellule = Cell.Value
  50. 'Si Facture trouvée.. on sort du programme
  51. If Cell.Value = Num_Facture Then
  52. Application.CutCopyMode = False
  53. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  54. Sheets("Facture").Select
  55. MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
  56. Exit Sub
  57. End If
  58.  
  59. Next
  60. ActiveSheet.Unprotect ("1608")
  61. ActiveCell.Offset(1, 0).Select
  62. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  63. :=False, Transpose:=False
  64. Application.CutCopyMode = False
  65. ActiveSheet.Protect ("1608")
  66. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  67. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  68. Sheets("Facture").Select
  69. ActiveWindow.SelectedSheets.PrintOut Copies:=2
  70. Case 3
  71. 'Num_Facture correspond au N° de facture à traiter
  72. Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
  73. Sheets("00003").Select
  74. ' Définition de la plage a regarder
  75. Set MaPlage = Range("Liste_N°_facture")
  76. ' Boucle + Test si Facture existe déjà
  77. For Each Cell In MaPlage
  78. ValeurCellule = Cell.Value
  79. 'Si Facture trouvée.. on sort du programme
  80. If Cell.Value = Num_Facture Then
  81. Application.CutCopyMode = False
  82. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  83. Sheets("Facture").Select
  84. MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
  85. Exit Sub
  86. End If
  87.  
  88. Next
  89. ActiveSheet.Unprotect ("1608")
  90. ActiveCell.Offset(1, 0).Select
  91. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  92. :=False, Transpose:=False
  93. Application.CutCopyMode = False
  94. ActiveSheet.Protect ("1608")
  95. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  96. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  97. Sheets("Facture").Select
  98. ActiveWindow.SelectedSheets.PrintOut Copies:=2
  99. End Select
  100. 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