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 Sub

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

Vérifie que cette feuille n’est pas protégée

Non elle ne l'est pas

Rechercher des sujets similaires à "copier coller classeur vba fonctionne"