Copie onglet excel avec VBA
Résolu/FerméLe Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 25 avril 2023 à 12:01
- Copie onglet excel avec VBA
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Si et excel - Guide
- Rouvrir onglet fermé - Guide
- Copie écran samsung - Guide
26 réponses
Modifié le 21 avril 2023 à 11:25
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
21 avril 2023 à 11:11
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é.
21 avril 2023 à 11:27
Bonjour,
Merci de revoir la correction du poste 1...(message croisé!)
Modifié le 21 avril 2023 à 12:05
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 question21 avril 2023 à 16:43
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
21 avril 2023 à 17:35
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)...?
24 avril 2023 à 08:16
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
Modifié le 24 avril 2023 à 10:05
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).. !
24 avril 2023 à 10:07
Ci-dessous les valeurs, si je ne me trompe pas
Le nom de la feuille quant à lui est correct.
24 avril 2023 à 11:19
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...!
24 avril 2023 à 11:43
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 ?
24 avril 2023 à 11:55
Bonjour,
Oui le fichier sera plus utile sur Accueil de Cjoint.com et poster le lien!
Modifié le 24 avril 2023 à 12:54
Bonjour,
Veuillez trouver le lien. Vous trouverez la macro dans le module 1!
https://cjoint.com/c/MDykTRUhBTo
24 avril 2023 à 13:49
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...!) ?
24 avril 2023 à 14:22
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
24 avril 2023 à 22:36
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
25 avril 2023 à 08:40
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...
Modifié le 25 avril 2023 à 09:00
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¨!
25 avril 2023 à 09:01
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.
25 avril 2023 à 10:05
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