Copier nom onglet + range d'un classeur à un autre

  • Initiateur de la discussion Initiateur de la discussion dmiasi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

dmiasi

Guest
Bonjour,

Ca fait plusieurs jours que je bloque sur ce problème et j'ai l'impression d'avoir essayé toutes les lignes de codes possibles...
Le classeur WBSource est le fichier source, le classer WBDest est le classeur destination. Le but est de parcourir tous les onglets de WBSource et de copier le nom de l'onglet + un range lorsqu'une condition est remplie :
WBSource.Worksheets(f).Rows(ligne).Copy _
Destination:=WBDest.Worksheets("Test").Cells(iWB, 1)
WBDest.Worksheets("Test").Cells(iWB, 10) = WBSource.Worksheets(f).Name
Ces lignes de code fonctionnent mais le souci c'est que je voudrais par exemple mettre le nom de l'onglet en premier :
WBDest.Worksheets("Test").Cells(iWB, 1) = WBSource.Worksheets(f).Name
WBSource.Worksheets(f).Rows(ligne).Copy _
Destination:=WBDest.Worksheets("Test").Cells(iWB, 2)
Juste en faisant ca, ca ne fonctionne plus...savez-vous pourquoi ?

De plus maintenant le but est de ne pas copier la ligne entière mais juste le range:
WBSource.Worksheets(f).Range(Cells(iWB, 1), Cells(iWB, 9)).Copy
'Destination:=WBDest.Worksheets("Test").Range(Cells(iWB, 1))
Ca ne fonctionne pas du tout...

Merci pour votre aide !
 
Re : Copier nom onglet + range d'un classeur à un autre

Bonjour dmiasi, bienvenue sur XLD,

1er problème

Code:
WBDest.Worksheets("Test").Cells(iWB, 1) = WBSource.Worksheets(f).Name
WBSource.Worksheets(f).Rows(ligne).Copy _
Destination:=WBDest.Worksheets("Test").Cells(iWB, 2)
Juste en faisant ca, ca ne fonctionne plus...savez-vous pourquoi ?

Copier une ligne entière et la coller sur une cellule en colonne 2 (B) ferait sortir de la feuille...

Il faut coller sur une cellule en colonne 1 (A) ou sur une ligne entière.

2ème problème

Code:
WBSource.Worksheets(f).Range(Cells(iWB, 1), Cells(iWB, 9)).Copy _
Destination:=WBDest.Worksheets("Test").Range(Cells(iWB, 1))
Ca ne fonctionne pas du tout...

Devant les 2 Cells il faut aussi définir la feuille :

Code:
WBSource.Worksheets(f).Range(WBSource.Worksheets(f).Cells(iWB, 1), WBSource.Worksheets(f).Cells(iWB, 9)).Copy _
Destination:=WBDest.Worksheets("Test").Range(Cells(iWB, 1))
Et bien sûr bien plus simplement avec Resize :

Code:
WBSource.Worksheets(f).Cells(iWB, 1).Resize(, 9).Copy _
Destination:=WBDest.Worksheets("Test").Range(Cells(iWB, 1))
A+
 
Re : Copier nom onglet + range d'un classeur à un autre

Re,

Pour revenir au 1er problème, si vous voulez absolument entrer d'abord le nom de l'onglet, vous pouvez utiliser :

Code:
WBDest.Worksheets("Test").Cells(iWB, 1) = WBSource.Worksheets(f).Name
WBSource.Worksheets(f).Rows(ligne).Resize(, 255).Copy _
Destination:=WBDest.Worksheets("Test").Cells(iWB, 2)
Ainsi on ne copie pas la ligne entière mais les 255 premières cellules.

Mais la hauteur de la ligne ne sera pas copiée...

A+
 
Re : Copier nom onglet + range d'un classeur à un autre

Ca marche ! Merci beaucoup !
Est-il possible de ne pas copier la mise en forme (mais juste les valeurs contenues dans les cellules) ?

Encore merci, je ne m'en sortais pas !🙂
 
Re : Copier nom onglet + range d'un classeur à un autre

Bonjour

Oui c'est possible
En ne faisant pas un copier/coller par exemple.
Code:
WBDest.Worksheets("Test").Cells(iWB, 1) = WBSource.Worksheets(f).Name
WBDest.Worksheets("Test").Cells(iWB, 2).Resize(, 255)=WBSource.Worksheets(f).Rows(ligne).Resize(, 255)
 
Re : Copier nom onglet + range d'un classeur à un autre

Et comme cela ?
Code:
WBDest.Worksheets("Test").Cells(iWB, 1) = WBSource.Worksheets(f).Name
WBDest.Worksheets("Test").Cells(iWB, 2).Resize(, 255).value=WBSource.Worksheets(f).Cells(ligne,2).Resize(, 255).value

Sur un même classeur cela fonctionne (voir ci-dessous)
Code:
Sub test()
Worksheets(2).Cells(1, 2).Resize(, 255).Value = Worksheets(1).Cells(1, 2).Resize(, 255).Value
End Sub
 
Dernière édition:
Re : Copier nom onglet + range d'un classeur à un autre

Je viens de tester sur un classeur de test et cela fonctionne
(voir mon précédent message)

Avec deux classeurs, cela fonctionne aussi
Code:
Sub testV2()
Workbooks("Classeur2").Worksheets(2).Cells(1, 2).Resize(, 255).Value = _
Workbooks("Classeur1").Worksheets(1).Cells(1, 2).Resize(, 255).Value
End Sub

Cela doit fonctionner en adaptant le code pour tes fichiers.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
915
Réponses
15
Affichages
791
Retour