Copie onglet excel avec VBA

Résolu/Fermé
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023 - 21 avril 2023 à 09:11
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 - 25 avril 2023 à 12:01

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 ?

A voir également:

26 réponses

Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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

0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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é.

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
21 avril 2023 à 11:27

Bonjour,

Merci de revoir la correction du poste 1...(message croisé!)


0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
21 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

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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)...?


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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).. !


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
24 avril 2023 à 10:07

Ci-dessous les valeurs, si je ne me trompe pas

Le nom de la feuille quant à lui est correct.

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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...!


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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 ?

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
24 avril 2023 à 11:55

Bonjour,

Oui le fichier sera plus utile sur Accueil de Cjoint.com et poster le lien!


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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...!) ?


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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...

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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¨!


0
ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023
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.

0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
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


0