Copie onglet excel avec VBA
RésoluLe Pingou Messages postés 12249 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 ?
- Copie onglet excel avec VBA
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Word et excel gratuit - Guide
- Copie écran samsung - Guide
- Raccourci rouvrir onglet fermé - Guide
26 réponses
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,
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 questionRebonjour,
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 Sub
Je 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.