VBA : Importer des colonnes de différentes feuilles vers un autre fichier
Bonjour,
Merci pour ce forum c'est une véritable mine d'infos !
Je vous expose mon problème, j'aimerais trouver un code vba pour importer des colonnes de différentes feuilles vers un autre fichier
Ci-joint des documents pour mieux vous illustrer :
je voudrais tout d'abord créer une nouvelle feuille dans mon fichier : prix produit
ensuite copier les colonnes B de chaque feuille du fichier : données produits (sachant que ces colonnes seront mise à jour le nombre de ligne va augmenter)
pour enfin les coller dans la feuille nouvellement créée.
Est ce que vous pourriez m'aider à trouver un code faisant tout cela ?
J'ai déjà avancé sur la création de la feuille
Sub importation()
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
End Sub
Salut,
Ta demande n’est pas de plus précise et tes fichiers sont un peu bizarres
J’ai repris ton fichier pour la base de données, je l’ai renommé ‘’Données’’ et j’ai un peu modifié ces données de base.
J’ai ensuite considéré que tu avais ton fichier ‘’Prix-produit’’ dans le même dossier de ton arborescence que le fichier ‘’Données’’.
Si tu ouvres le fichier ‘’Prix-produit’’ et que tu lances la macro placée derrière le bouton ‘’Report sur nouvelle feuille’’, une nouvelle feuille ‘’Data’’ est créée, son numéro est incrémenté (‘’Data001’’, ‘’Data002’’, etc.) et les données du fichier ‘’Données’’ y sont reportées.
Dans la feuille nouvellement créée, le nom de la feuille passée en revue du fichier ‘’Données’’ est inscrite dans la ligne 1. On voit alors que tu as une feuille masquée dans la copie ton fichier que j’ai renommé ‘’Données’’, la feuille ‘’Classified as UnClassified’’, mais également une feuille fantôme ‘’xl_DCF_History’’. Je parle d’une feuille fantôme car je ne sais pas où aller la chercher dans ce fichier, je ne sais pas d’où elle sort !!!!!
Est-ce que ça part dans le bon sens ?
Bonjour,
Pour poster du code, vous pouvez utiliser les balises </> qui se trouvent sur le ruban en haut de l'espace commentaire.
Voici une proposition si j'ai bien compris :
Sub importation()
if not FeuilleExiste("Data") then
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
else
Sheets("Data").cells.delete
end if
for each ws in worksheets
if ws.name <> "Data" then
with sheets("Data")
col = .cells(1, .columns.count).end(xltoleft).column
ws.columns(2).copy .cells(1, col)
end with
end if
next ws
Sheets("Data").copy
Activeworkbook.close savechanges:=true, filename:="Data " & format(now, "YYMMDD-HHMM")
End Sub
function FeuilleExiste(nomfeuille$) as boolean
on error resume next
FeuilleExiste = Sheets(nomfeuille).index
end functionSalut Yvouille : j'ai vu ta réponse mais comme je m'étais engagé...
Cdlt,
Sub importation()
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
End Sub
Sub test()
Workbooks("Prix produit.xlsx").Worksheets("Data").Range("A2:A400").Value = Workbooks("données produits.xlsx").Worksheets("Historique1").Range("B2:B400").Value
Workbooks("Prix produit.xlsx").Worksheets("Data").Range("B2:B400").Value = Workbooks("données produits.xlsx").Worksheets("Historique2").Range("B2:B400").Value
Workbooks("Prix produit.xlsx").Worksheets("Data").Range("C2:C400").Value = Workbooks("données produits.xlsx").Worksheets("Historique3").Range("B2:B400").Value
Workbooks("Prix produit.xlsx").Worksheets("Data").Range("D2:D400").Value = Workbooks("données produits.xlsx").Worksheets("Historique4").Range("B2:B400").Value
End SubMerci pour vos réponses @3GB et @yvouille !!! désolé si je n'ai pas été bien clair ... (mon language de débutant doit y être pour beaucoup)
J'ai moi même de mon côté travaillé sur un code que j'ai inséré dans mon message. Ce code est ok pour moi puiqu'il me permet d'insérer dans la feuille "data" les colonnes B des différentes feuilles du fichier "données produit". Qu'est ce que vous pensez de ce code ?
j'aimerais bien l'améliorer, en faisant en sorte qu'il s'arrête de sélectionner : à la dernière ligne pleine de la colonne B. (ici il s'arrête à la LIGNE B400 ...)
Message 2 :
merci pour vos codes :)
Après test ils fonctionnent bien mieux que le mien !!
Yvouille le tien fonctionne très bien !
Vous m'avez bien débloqué, maintenant je peux supprimer les doublons entre la feuille price et la feuille data !
merci beaucoup
Bonjour,
Votre code est pas mal, il faut le boulot. Pour la dernière ligne, il faut utiliser la méthode end (l'équivalent du "ctrl" + flèche avec les touches sur excel pour des déplacements globaux). Voici le code adapté :
Sub importation()
if not FeuilleExiste("Data") then
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
else
'Sheets("Data").cells.delete
end if
for each ws in worksheets 'pour chaque feuille
if ws.name like "Histo*" then ' si nom commence par "Histo"
with sheets("Data") 'sur feuille data
col = .cells(1, .columns.count).end(xltoleft).column 'col vaut dernière colonne en revenant à gauche de la droite
lig = .cells(.rows.count, 1).end(xlup).row 'lig vaut der ligne en revenant d'en bas vers le haut
dl = ws.cells(ws.rows.count, 1).end(xlup).row 'dl vaut egalement der ligne mais de la feuille en cours
.cells(lig, col).resize(dl - 1, 1).value = ws.range("B2:B" & dl).value 'en cellule(lig, col), on redimensionne au nombre de cellule de la colonne B de ws et on prend les valeurs
end with
end if
next ws
Sheets("Data").copy
Activeworkbook.close savechanges:=true, filename:="Data " & format(now, "YYMMDD-HHMM")
End Sub
function FeuilleExiste(nomfeuille$) as boolean
on error resume next
FeuilleExiste = Sheets(nomfeuille).index
end functionCdlt,