Copie onglet excel avec VBA
RésoluLe Pingou Messages postés 12276 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je viens vers vous car je rencontre un problème avec la copie d'un onglet Excel via VBA.
Je voudrais faire la copie d'un onglet nommé "Exploitations" présent sur un fichier Excel que j'ouvre systématiquement en 1er, pour le mettre à la fin d'un autre fichier Excel dit "Actif".
Le problème vient du fait que je ne peux pas mettre le nom d'un fichier précis pour la copie, puisque le fichier de destination n'aura jamais le même nom.
Je ne sais pas si je suis très clair, mais en gros je veux copier mon onglet d'un fichier ouvert en 1er à un ActivWorkbook.
J'ai essayé plein de méthode différente (que je ne comprends pas vraiment) comme vous pourrez voir ci-dessous :
'Workbooks(1).Sheets(1)("exploitations").Copy After:=Workbooks.ActiveSheets(26)
'Sheets(1)("exploitations").Select
'Worksheets(1)("exploitations").Copy After:=ActiveWorkbooks.Sheets(26)
'Sheets(1)("exploitations").Copy After:=Workbooks.Sheets(26)
'Sheets(1)("Feuil1").Copy After:=Workbooks("Exemple.xlsm").Sheets(Workbooks("Exemple.xlsm").Sheets.Count)
Pourriez-vous m'éclairer s'il vous plaît ?
26 réponses
- 1
- 2
-
Bonjour,
Je comprends, copier feuille d'un classeur vers un autre ...!
Note: valable pour 2 classeurs ouverts....!!!!
Sub CopieFeuilleAutreClasseur() nomCl = ActiveWorkbook.Name For Each wb In Workbooks MsgBox "Le classeur " & wb.Name & " est ouvert." If wb.Name <> nomCl Then nbsh = wb.Sheets.Count Sheets("exploitations").Copy After:=Workbooks(wb.Name).Sheets(nbsh) Exit For End If Next wb ' Macro1 Macro Range("A1").Select End Sub
-
Bonjour,
Je vous remercie pour votre réactivité.
Cependant, j'ai déjà essayé cette démarche mais le problème va venir de cette partie
=Workbooks("NomAutreClasseur.xlsx")Je ne peux pas mettre un nom de classeur puisque l'onglet que je veux copier ira dans des fichiers Excel ayant des noms différents.
C'est pour ça que je voulais, utiliser une sorte de "ActivWorkbook" pour lui dire de me le copier dans le dernier fichier Excel sélectionné.
-
Bonjour,
Merci de revoir la correction du poste 1...(message croisé!)
-
Bonjour,
Il me semble que vous avez plus de 2 classeurs ouverts, dans ce cas voir ce code:
Sub CopieFeuilleAutreClasseur() nomCl = ActiveWorkbook.Name For Each wb In Workbooks If wb.Name <> nomCl Then reponse = MsgBox("Est-ce le bon classeur: " & wb.Name, vbQuestion + vbYesNo + vbDefaultButton2, "Décision") If reponse = 6 Then nbsh = wb.Sheets.Count Sheets("Feuil1").Copy After:=Workbooks(wb.Name).Sheets(nbsh) Exit For End If End If Next wb Range("A1").Select End Sub
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Rebonjour,
Je vous remercie.
Sheets("Feuil1").Copy After:=Workbooks(wb.Name).Sheets(nbsh)A cette ligne je rencontre "Erreur d'exécution '9'" "L'indice n'appartient pas à la sélection.".
Qu'est-ce que cela signifie ?
Je vous remercie par avance
-
Bonjour,
Je viens de contrôler le code et cela fonctionne sans erreur.
Avez-vous utiliser le code du poste 4 ...?
La macro est bien dans le classeur ou se trouve la feuille (exploitations)...?
-
Bonjour,
La macro est effectivement mise sur la feuille exploitation et j'ai bien utilisé celui du poste 4 et essayé le celui du 1er poste.
J'obtiens le même message d'erreur…
Au cas où j'aurai moi-même mal copié, vous trouverez ci-dessous le code :
Sub CopieFeuilleAutreClasseur() nomCl = ActiveWorkbook.Name For Each Wb In Workbooks If Wb.Name <> nomCl Then reponse = MsgBox("Est-ce le bon classeur: " & Wb.Name, vbQuestion + vbYesNo + vbDefaultButton2, "Décision") If reponse = 6 Then nbsh = Wb.Sheets.Count Sheets("exploitations").Copy After:=Workbooks(Wb.Name).Sheets(nbsh) Exit For End If End If Next Wb Range("A1").Select End SubJe vous remercie par avance
-
Bonjour,
Merci de me communiquer les valeurs dans les variables: Wb.Name ...... nbsh.......!
Contrôler que le nom de la feuilles exploitations est correct...(Majuscule /minuscule).. !
-
-
Bonjour,
Merci les valeurs semblent correctes.
Cependant il manque le Wb.Name ??????
Pour le nom ce n'est pas sur car vous mentionnez :
je voudrais faire la copie d'un onglet nommé "Exploitations"
Donc une majuscule au début et non pas minuscule...!
-
Bonjour,
Je ne comprends pas pourquoi il me manque le "Wb.name"
Et concernant le nom de l'onglet c'est bien "exploitation". J'ai quand même essayé avec une majuscule mais cela ne fonctionne pas mieux.
Vous préféreriez peut-être que je vous donne le fichier Excel, pour regarder ?
-
-
Bonjour,
Veuillez trouver le lien. Vous trouverez la macro dans le module 1!
https://cjoint.com/c/MDykTRUhBTo
-
Bonjour,
Merci, chez moi tout fonctionne correctement.
Lors de la demande pour sélectionner le classeur qui doit recevoir la feuille (Exploitation) avez-vous bien choisi le bon classeur...(ce classeur doit être ouvert...!) ?
-
Bonjour,
Je vous envoie également l'un des fichiers qui doit recevoir la feuille.
Je fais tous comme vous me conseillez de faire mais rien ne fonctionne...
https://www.cjoint.com/c/MDymvzypMLo
-
Bonjour,
Merci, cela fonctionne parfaitement la feuille est bien insérée en dernière position du classeur :ItzFolloWerS_DOSSIER-REVISIONV19-1
Les 2 classeurs : https://www.cjoint.com/c/MDyuKbPK2eZ
-
Bonjour,
En effet, il fonctionne.
Je viens de comprendre d'où provenait l'erreur.
Celle-ci provient du fait que la macro ne fonctionne pas dans le sens que je voudrais.
Je veux dire par là que pour que votre macro fonctionne, je dois sélectionner le doc impôt en dernier (Actif) alors que pour moi ça devrait être l'inverse, c’est-à-dire que le dossier de révision devrait être le dernier sélectionné.
Toutes mes macros fonctionnent comme ça (j'importe les données du doc impôt "1er fichier ouvert" dans le dossier de révision "fichier actif/dernier sélectionné").
Je ne sais pas si je suis clair dans mes explications...
-
Bonjour,
Oh, mal formuler depuis le départ..!
En résumé la macro se trouve dans le classeur ou je doit importer la feuille "exploitations" d'un autre classeur qui est ouvert ou fermé ???
Merci de Votre retour¨!
-
Bonjour,
La macro, doit être présente dans le classeur qui possède l'onglet Exploitations.
Et à partir de cette macro je dois l'envoyer dans un autre classeur qui est ouvert.
Si vous voulez un exemple:
Workbooks(1).Sheets(1).Range("B19:L19").Copy Destination:=ActiveSheet.Range("B19:L19")(Workbooks(1).Sheets(1) ) = Doc impot
(Copy Destination:=ActiveSheet) = Dossier de révision
Là je fais une copie d'une ligne du doc impôt au dossier de révision.
C'est cette logique que je veux respecter.
-
Bonjour,
Eh bien c'est exactement le cas, la macro est dans le classeur (expl: DocumentimpotV2023-1.xlsm) qui à la feuille Exploitations et vous choisissez le classeur (expl: DOSSIER-REVISIONV19-1.xlsm) qui reçoit la feuille en dernière position
- 1
- 2
