Microsoft 365 Copier Coller les données (cellules) de plusieurs feuilles d'un classeur vers plusieurs autres feuilles d'un classeur

92lever

XLDnaute Nouveau
Bonjour à tous, la communauté

Je débute vraiment en VBA, j'espère pouvoir être clair dans l'explication de mon problème.

1 - Je souhaite copier les données de plusieurs feuilles d'un classeur ( fichier sol source) et coller vers un seul fichier ( fichier comp cible) qui lui a aussi plusieurs feuilles.
2 - mon but est d'ouvrir le fichier source, pour chaque feuille de ce classeur, sélectionner les données ( cellules sans entetes) copier et coller vers chaque feuille correspondante du fichier cible mais dans une plage de cellules précise de la feuille (en vert dans le fichier).

j'ai commencé un code mais quand je bloque après l'ouverture du fichier source, le code bug et j'ai pas trop d idées pour avancer .

PS :

Si quelqu'un pourrait m'aider, je vous joint le code et les fichiers

Merci par avance pour vos aides

code VBa dans fichier xlsm:

Option Explicit
Sub copie_Solaar()
Dim fd As Object
Dim chemin$, nom$
Dim SolaarSource As Workbook 'fichier à ouvrir'
Dim compareCible As Workbook 'fihcier où on écrit les données'
Dim MaxLignes As Integer

Application.DisplayAlerts = False 'empecher message d'alertes'
Application.ScreenUpdating = False 'cacher la MAJ d'excel'


Set compareCible = ThisWorkbook
MaxLignes = Range("B" & Rows.Count).End(xlUp).Row

compareCible.Sheets("Metier").Range("B3:H" & MaxLignes).ClearContents
compareCible.Sheets("Secteur").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("Produit").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("Portefeuille").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("etc....feuill").Range("B3:J" & MaxLignes).ClearContents

Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.Title = "Choisissez le fichier à partir du quel vous souhaitez importer les données"
.InitialFileName = ""
.Filters.Clear
.AllowMultiSelect = False
If .Show <> 0 Then
nom = .SelectedItems(1)
Else
MsgBox "Vous n'avez selectionné aucun fichier", , "Recommencer": GoTo 1
End If
End With

Set SolaarSource = Workbooks.Open(nom) " mon code bloque juste parès l'ouverture du fichier"

SolaarSource.Sheets("EntiteVersionMetierDevise").Range("A1:G").Copy
compareCible.Sheets("EntiteVersionMetierDevise").Range("B3" & MaxLignes).PasteSpécial Paste:=xlPasteValues


'"Je reflechis si je peux utiliser le décompte des feuilles et selectionner les cellules à copier coller voir ci-dessous"
'SolaarSource.Activate
'With SolaarSource
'For Each ws In .Worksheets
'ws.

SolaarSource.Close 0
MsgBox "Bon alors tu es
 

Pièces jointes

  • Solaar.xlsx
    964.9 KB · Affichages: 8
  • COMPARE.xlsm
    870.9 KB · Affichages: 7

92lever

XLDnaute Nouveau
Bonjour à tous, la communauté

Je débute vraiment en VBA, j'espère pouvoir être clair dans l'explication de mon problème.

1 - Je souhaite copier les données de plusieurs feuilles d'un classeur ( fichier sol source) et coller vers un seul fichier ( fichier comp cible) qui lui a aussi plusieurs feuilles.
2 - mon but est d'ouvrir le fichier source, pour chaque feuille de ce classeur, sélectionner les données ( cellules sans entetes) copier et coller vers chaque feuille correspondante du fichier cible mais dans une plage de cellules précise de la feuille (en vert dans le fichier).

j'ai commencé un code mais quand je bloque après l'ouverture du fichier source, le code bug et j'ai pas trop d idées pour avancer .

PS :

Si quelqu'un pourrait m'aider, je vous joint le code et les fichiers

Merci par avance pour vos aides

code VBa dans fichier xlsm:

Option Explicit
Sub copie_Solaar()
Dim fd As Object
Dim chemin$, nom$
Dim SolaarSource As Workbook 'fichier à ouvrir'
Dim compareCible As Workbook 'fihcier où on écrit les données'
Dim MaxLignes As Integer

Application.DisplayAlerts = False 'empecher message d'alertes'
Application.ScreenUpdating = False 'cacher la MAJ d'excel'


Set compareCible = ThisWorkbook
MaxLignes = Range("B" & Rows.Count).End(xlUp).Row

compareCible.Sheets("Metier").Range("B3:H" & MaxLignes).ClearContents
compareCible.Sheets("Secteur").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("Produit").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("Portefeuille").Range("B3:G" & MaxLignes).ClearContents
'compareCible.Sheets("etc....feuill").Range("B3:J" & MaxLignes).ClearContents

Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.Title = "Choisissez le fichier à partir du quel vous souhaitez importer les données"
2.InitialFileName = ""
.Filters.Clear
.AllowMultiSelect = False
If .Show <> 0 Then
nom = .SelectedItems(1)
Else
MsgBox "Vous n'avez selectionné aucun fichier", , "Recommencer": GoTo 1
End If
End With

Set SolaarSource = Workbooks.Open(nom) " mon code bloque juste parès l'ouverture du fichier"

SolaarSource.Sheets("EntiteVersionMetierDevise").Range("A1:G").Copy
compareCible.Sheets("EntiteVersionMetierDevise").Range("B3" & MaxLignes).PasteSpécial Paste:=xlPasteValues


'"Je reflechis si je peux utiliser le décompte des feuilles et selectionner les cellules à copier coller voir ci-dessous"
'SolaarSource.Activate
'With SolaarSource
'For Each ws In .Worksheets
'ws.

SolaarSource.Close 0
MsgBox "Bon alors tu es

Bonjour ,

Quelqu'un aurait-il une idée?

Merci beaucoup

Cdlt
92Lever
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne vois pas de feuille "EntiteVersionMetierDevise" dans vos classeurs.
Par ailleurs dans .Range("A1:G") l'intégralité de la colonne G ça fait beaucoup de lignes, et ça ne peut pas être collé ailleurs qu'en ligne 1.
 

92lever

XLDnaute Nouveau
Bonjour.
Je ne vois pas de feuille "EntiteVersionMetierDevise" dans vos classeurs.
Par ailleurs dans .Range("A1:G") l'intégralité de la colonne G ça fait beaucoup de lignes, et ça ne peut pas être collé ailleurs qu'en ligne 1.
Bonjour, merci pour votre retour......

désolé c'est bien feuille "Metier"
Correction
SolaarSource.Sheets("Metier").Range("A1:G").Copy
compareCible.Sheets("Metier").Range("B3" & MaxLignes).PasteSpécial Paste:=xlPasteValues

Par contre le nombre de lignes pouvant varier, definir une plage de cellules à copier ne vas restreindre la copie en cas de lignes plus importances ?

Comment est ce que je peux faire que le paste coimmence à parti de la troisième ligne par exemple?

je ne m'y connais pas vraiment, merci pour votre patience.
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à toutes & à tous, bonsoir @92lever, bonsoir @Dranreb
Je me suis plonger sur ton problème et j'ai pondu une macro qui importe les données de tous les fichiers à importer d'un coup (ici j'ai 2 fichiers sources Solaar.xlsx et BGM.xlsx, j'ai créé le 2ème pour l'exercice)
Pour cela j'ai transformé les plages source et les plages cible en tableaux structurés et j'ai ajouté des onglets "Tables" à ces trois classeurs.

Choix fait pour cette macro :
Ne pas ouvrir les classeurs source
Les classeurs source se trouvent dans le même répertoire que ce classeur
Décrire les paramétres pour l'import dans des onglets "tables" (dans le classeur Cible càd celui-ci et dans les classeurs Source)

Les classeurs à importer sont décrits dans le tableau structuré "Tb_Import" de l'onglets "Tables" de ce classeur
Nom du classeur à importer​
Nom de sa feuille tables (a priori "Tables")​
Adresse de la cellule de cette feuille tables qui contient le nombre de feuilles à importer (a priori B1)​
Adresse de la cellule de cette feuille tables qui contient le nom de la 1ère feuille à importer​
N° du tableau structuré dans la feuille cible.​

La macro lit le tableau Tb_Import et ligne par ligne
Classeur source après classeur source​
Elle recherche les informations stockées dans l'onglet "Tables" de chaque classeur source​
et pour chaque classeur source elle les place dans le tableau structuré "Tb_Réf" de l'onglets "Tables" de ce classeur.​
Elle analyse les informations stockées dans "Tb_Réf"​
Nombre de feuilles à importer du classeur source;​
Nom des feuilles​
1ère cellule du tableau à importer​
Nbre de ligne à importer​
Nbre de colonnes à importer​
Feuille source après feuille source​
Elle vérifie que dans ce classeur il existe une feuille du même nom que cette feuille source : la feuille cible​
Elle reconstitue l'adresse externe de la plage à importer​
Elle redimensionne le tableau cible​
Elle place la formule avec référence externe dans la plage cible​
Elle remplace les formules par les valeurs​
J'ai copieusement commenté le code (du coup il faut aller le voir dans la PJ.)

Amicalement
Alain
 

Pièces jointes

  • COMPARE.xlsm
    51.9 KB · Affichages: 15
  • Solaar.xlsx
    117.5 KB · Affichages: 8
  • BGM.xlsx
    117.6 KB · Affichages: 10
Dernière édition:

92lever

XLDnaute Nouveau
Bonsoir à toutes & à tous, bonsoir @92lever, bonsoir @Dranreb
Je me suis plonger sur ton problème et j'ai pondu une macro qui importe les données de tous les fichiers à importer d'un coup (ici j'ai 2 fichiers sources Solaar.xlsx et BGM.xlsx, j'ai créé le 2ème pour l'exercice)
Pour cela j'ai transformé les plages source et les plages cible en tableaux structurés et j'ai ajouté des onglets "Tables" à ces trois classeurs.

Choix fait pour cette macro :
Ne pas ouvrir les classeurs source
Les classeurs source se trouvent dans le même répertoire que ce classeur
Décrire les paramétres pour l'import dans des onglets "tables" (dans le classeur Cible càd celui-ci et dans les classeurs Source)

Les classeurs à importer sont décrits dans le tableau structuré "Tb_Import" de l'onglets "Tables" de ce classeur
Nom du classeur à importer​
Nom de sa feuille tables (a priori "Tables")​
Adresse de la cellule de cette feuille tables qui contient le nombre de feuilles à importer (a priori B1)​
Adresse de la cellule de cette feuille tables qui contient le nom de la 1ère feuille à importer​
N° du tableau structuré dans la feuille cible.​

La macro lit le tableau Tb_Import et ligne par ligne
Classeur source après classeur source​
Elle recherche les informations stockées dans l'onglet "Tables" de chaque classeur source​
et pour chaque classeur source elle les place dans le tableau structuré "Tb_Réf" de l'onglets "Tables" de ce classeur.​
Elle analyse les informations stockées dans "Tb_Réf"​
Nombre de feuilles à importer du classeur source;​
Nom des feuilles​
1ère cellule du tableau à importer​
Nbre de ligne à importer​
Nbre de colonnes à importer​
Feuille source après feuille source​
Elle vérifie que dans ce classeur il existe une feuille du même nom que cette feuille source : la feuille cible​
Elle reconstitue l'adresse externe de la plage à importer​
Elle redimensionne le tableau cible​
Elle place la formule avec référence externe dans la plage cible​
Elle remplace les formules par les valeurs​
J'ai copieusement commenté le code (du coup il faut aller le voir dans la PJ.)

Amicalement
Alain
Bonjour à tous, Bonjour @AtTheOne

Merci pour ton retour. En effet, tout est super detaillé dans le fichier, je vais exécuter et vous dire le resultat

Merci
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 904
Membres
101 834
dernier inscrit
Jeremy06510