Bloquer une macro après utilisation de celle-ci
Bonjour au forum,
J’ai la macro suivante qui exporte la plage de cellules A21 à D…jusqu’à la dernière cellule vide dans une autre feuille.
Cette macro, avant d’exporter cette plage de données insère 2 colonnes entre « Compte » et Date de valeur » et 1 autre colonne entre « Date de valeur » et « Montant » afin que ceux-ci possèdent le même nombre de colonnes que la feuille de destination.
Je voudrai savoir comment peut-on inclure dans le code que si l’utilisateur exécute une 2nde fois la macro (de l’exportation), un message lui indique que le traitement à déjà été effectué, et si possible de bloquer la macro s'il tente d'effectuer une 2nde fois cette tâche.
Il est primordial qu’un message d’alerte lui indique qu’il a déjà effectué cette tâche sinon à chaque fois qu’il appuie sur le bouton de la macro, celle-ci va insérer autant de colonnes lorsqu’il va appuyer sur le bouton.
Sub exporter2()
Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E19").Select
Dim lgn As Long
Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
On Error GoTo DossierFermé
With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
.Range("A" & lgn).PasteSpecial xlPasteAll
End With
Application.CutCopyMode = False
MsgBox "Travail terminé"
Exit Sub
DossierFermé:
MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16
End SubEn vous remerciant de votre aide.
Bonjour,
Sub test()
Static bFait As Boolean
If bFait Then
MsgBox "Traitement déjà réalisé"
Else
' Traitement
bFait = True
End If
End Suberic
Bonjour,
Si ta macro insère des colonnes dans ta feuille, tu peux tester, au préalable, le nombre de colonnes. S'il est égal à 4, tu lances la macro, sinon, non...
Par exemple :
Sub exporter2()
Dim Rng As Range
Set Rng = Range("A20").CurrentRegion
If Rng.Columns.Count = 4 Then
Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("E:E").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Dim lgn As Long
Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
On Error GoTo DossierFermé
With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
.Range("A" & lgn).PasteSpecial xlPasteAll
End With
Application.CutCopyMode = False
MsgBox "Travail terminé"
Exit Sub
Else
MsgBox "Macro déjà réalisée"
Exit Sub
End If
DossierFermé:
MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16
End SubBonjour Eriiic,
Merci pour ta réponse, j'essaie de tester ton code, mais je ne vois pas où est-ce que je peux l'inclure dans ma macro ?
C'est ta macro que tu dois inclure dans ce code. Sous 'traitement tu mets ce qui doit être réalisé une fois.
eric
Bonjour Eric,
Voici ma macro intégré à ton code, mais cela ne résoud pas mon problème.
Sub test()
Static bFait As Boolean
If bFait Then
MsgBox "Traitement déjà réalisé"
Else
' Traitement
Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E19").Select
Dim lgn As Long
Range("A21:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
On Error GoTo DossierFermé
With Workbooks("FRAIS BANCAIRES.xlsx").Sheets("BD")
lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
.Range("A" & lgn).PasteSpecial xlPasteAll
End With
Application.CutCopyMode = False
MsgBox "Travail terminé"
Exit Sub
DossierFermé:
MsgBox "Merci d'ouvrir le fichier ''FRAIS BANCAIRES.xlsx'' ", 16
bFait = True
End If
End SubBonjour,
Je viens de tester ton code.
Au premier lancement la macro est réalisée, pas au second.
Par contre si tu rouvres le fichier on peut la relancer. Si tu ne le veux pas il faut mémoriser la variable bFait dans une cellule de feuille (et la récupérer en début de macro bien sûr).
Sinon tu peux partir sur l'idée de pijaku qui est de compter les colonnes, ça marchera aussi.
eric
C'est étonnant, car lorsque je lance une 2nde fois la macro, elle s'exécute.