Copier-coller d'un classeur à un autre en VBA ne fonctionne plus
Bonjour
Par une macro, je copie la valeur une plage de cellules fusionnées (A1:C2) d'un classeur ouvert nommé "liste_ia.xlsm" vers une plage identique (fusionnée également) d'un second classeur ouvert dont je ne connais pas le nom par avance (il change à chaque sélection).
Le but est donc de chercher quels sont les classeurs ouverts et de coller la valeur copiée de "liste_ia.xlsm" vers ce second classeur ouvert.
Jusqu'à aujourd'hui la macro fonctionnait, mais maintenant elle plante dès qu'il s'agit de coller (il semble qu'elle ait perdu la valeur copiée lors du changement de classeur)
Je reçois le message : "erreur d'exécution 1004, La méthode PasteSpecial de la classe Range a échoué"
Voici le code complet des deux macros concernées (dans le même module).
Le fichier à partir duquel la macro est lancée se nomme "liste_ia.xlsm"
Sub ingaff_1()
Range("a1:c2").Select
Selection.Copy
coping
End Sub
Sub coping()
Application.CutCopyMode = True
Dim wb As Workbook
For Each wb In Workbooks
wb.Activate
If wb.Name = "PERSONAL.XLB" Then GoTo suite
If wb.Name = "liste_ia.xlsm" Then GoTo suite
suite:
Next wb
ActiveWorkbook.Unprotect Password:="Toto"
'Excel.Workbooks(Fichier).Worksheets("Formulaire").Activate
Dim DernLigne As Long
DernLigne = Range("F" & Rows.Count).End(xlUp).Row
If DernLigne = 219 Then GoTo cas1 Else GoTo cas2
cas1:
Range("G57:I58").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
GoTo fincas
cas2:
Range("G59:I60").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
fincas:
End SubSub coping()
Application.CutCopyMode = True
Dim wb As Workbook
For Each wb In Workbooks
wb.Activate
If wb.Name = "PERSONAL.XLB" Then GoTo suite
If wb.Name = "liste_ia.xlsm" Then GoTo suite
suite:
Next wb
ActiveWorkbook.Unprotect Password:="Toto"
'Excel.Workbooks(Fichier).Worksheets("Formulaire").Activate
Dim DernLigne As Long
DernLigne = Range("F" & Rows.Count).End(xlUp).Row
If DernLigne = 219 Then GoTo cas1 Else GoTo cas2
cas1:
Range("G57:I58").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
GoTo fincas
cas2:
Range("G59:I60").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
fincas:
End Sub
Quelqu'un peut-il me sortir de ce mauvais pas ? Merci d'avance
Bonjour,
le code me laisse quelque peu perplexe, j'ai mis des commentaires pour certaines instructions, et une suggestion de vérification à faire
Sub ingaff_1()
Range("a1:c2").Select
Selection.Copy
coping
End Sub
Sub coping()
Application.CutCopyMode = True
Dim wb As Workbook
' les instructions suivantes vont activer successivement les classeurs ouverts, le dernier classeur ouvert restera in fini activé
' les tests sur wb.name ne servent à rien
For Each wb In Workbooks
wb.Activate
If wb.Name = "PERSONAL.XLB" Then GoTo suite
If wb.Name = "liste_ia.xlsm" Then GoTo suite
suite:
Next wb
'------------------------
'
ActiveWorkbook.Unprotect Password:="Toto"
'Excel.Workbooks(Fichier).Worksheets("Formulaire").Activate
Dim DernLigne As Long
DernLigne = Range("F" & Rows.Count).End(xlUp).Row 'on sélectionne la dernière ligne de la colonne F sur la feuille active du classeur actif
If DernLigne = 219 Then GoTo cas1 Else GoTo cas2
cas1:
Range("G57:I58").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
GoTo fincas
cas2:
Range("G59:I60").Select 'on colle les données copiées sur la feuille active du classeur actif. vérifier que c'est la bonne feuille qui est active
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.Close savechanges:=True
fincas:
End SubBonjour,
le code me laisse quelque peu perplexe, j'ai mis des commentaires pour certaines instructions, et une suggestion de vérification à faire
Sub ingaff_1() Range("a1:c2").Select Selection.Copy coping End Sub Sub coping() Application.CutCopyMode = True Dim wb As Workbook ' les instructions suivantes vont activer successivement les classeurs ouverts, le dernier classeur ouvert restera in fini activé ' les tests sur wb.name ne servent à rien For Each wb In Workbooks wb.Activate If wb.Name = "PERSONAL.XLB" Then GoTo suite If wb.Name = "liste_ia.xlsm" Then GoTo suite suite: Next wb '------------------------ ' ActiveWorkbook.Unprotect Password:="Toto" 'Excel.Workbooks(Fichier).Worksheets("Formulaire").Activate Dim DernLigne As Long DernLigne = Range("F" & Rows.Count).End(xlUp).Row 'on sélectionne la dernière ligne de la colonne F sur la feuille active du classeur actif If DernLigne = 219 Then GoTo cas1 Else GoTo cas2 cas1: Range("G57:I58").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.Close savechanges:=True GoTo fincas cas2: Range("G59:I60").Select 'on colle les données copiées sur la feuille active du classeur actif. vérifier que c'est la bonne feuille qui est active Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.Close savechanges:=True fincas: End Sub
Bonjour
Les tests sur wb.name servent à ne pas sélectionner un classeur ouvert autre que celui qui est différent de parsonal.xlb et liste_ia.xlsm.
Oui la feuille active est bien celle sur laquelle on doit effectuer le collage (qui ne fonctionne pas).
Même si ce n'était pas la bonne feuille, la macro ne devrait pas planter (elle ne le faisait pas auparavant)
Merci de répondre à mon besoin svp
Cordialement
Vérifie que cette feuille n’est pas protégée