Macro excel - Réunir des données

Fermé
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010 - 5 mars 2009 à 10:33
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 21 mars 2009 à 15:39
Bonjour,

Toujours débutant en Macro excel....

Maintenant je cherche à réunir plusieurs données sous un même fichier dans un même onglet.

Mon document de base est classeur2.xls J'ai deux onglets, un nommé "Mois" vierge de données, l'autre nommé "Année" avec les anciennes données des mois précédents.
Mes données sont dans le fichier Classeurtestextraction.xls (Ce document regroupe mes données du mois)

A partir de classeur2.xls je veux lancer une macro permettant:
D'aller copier les données dans Classeurtestextraction.xls
De les coller dans l'onglet "Mois" de classeur2.xls
Jusque là je sais faire

Puis de les coller dans l'onglet "Année" de classeur2.xls
Comme dit précédement dans cet onglet figure déjà des données (données des mois précédents).
Je veux faire identifier à la macro la première cellule libre dans la colonne A afin de coller mes nouvelles données juste en dessous de la dernière ancienne.....
En résumé j'ai dans cet onglet des données occupants les colonnes A à G jusqu'à la ligne n
Je souhaite coller mes nouvelles données en An+1

Merci de vos réponses.
A voir également:

9 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
5 mars 2009 à 10:48
Bonjour,

La première ligne libre en VBA se trouve avec la formule suivante :

Sheets("Année").Range("A65536").End(xlUp).Row +1

A+
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
5 mars 2009 à 16:36
Salut Pilas31,

merci de ton retour,

cependant j'ai bien précisé être débutant.....
et donc je ne sais pas comment intégrer la comande dans ma macro.
De plus je viens d'être basculé sur un nouveau PC qui utilise office 2007

Ci dessous ma macro:
Visiblement rien ne marche je t'explique ma démarche dans ma tentative de macro !!!

Je souhaite copier dans la feuil1 les données qui commence en A1 et qui finisse en C quelquechose d'où la commande

Dim Derlig As Long
Sheets("Feuil1").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy

puis les coller dans le feuil3 avec en point de référence la première cellule libre en colonne A d'où les commande
Sheets("Feuil3").Range("A65536").End(xlUp).Row 1
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

ensuite copier des données se trouvant dans Feuil2 qui commencent en A1 et qui finisse en C quelquechôse d'où la commande
Dim Derlig As Long
Sheets("Feuil2").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy

et enfin coller ses données dans la première cellule libre en colonneA

Sheets("Feuil3").Range("A65536").End(xlUp).Row 1
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Voici le tout associé:

Sub Macro3()
'
' Macro3 Macro
'

'
Dim Derlig As Long
Sheets("Feuil1").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy
Sheets("Feuil3").Select
Sheets("Feuil3").Range("A65536").End(xlUp).Row 1
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Dim Derlig As Long
Sheets("Feuil2").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy
Sheets("Feuil3").Range("A65536").End(xlUp).Row 1
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub


J'ai une erreur au niveau du second "Dim derlig As Long"...!!!
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
5 mars 2009 à 17:05
Salut,

Je regarde et je te dis....

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
5 mars 2009 à 17:15
Bon voila:

Sub Macro3()
'
' Macro3 Macro
'
Dim Derlig As Long
'
Sheets("Feuil1").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy
Sheets("Feuil3").Select
Derlig = Range("A65536").End(xlUp).Row + 1
Cells(Derlig, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets("Feuil2").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 3)).Copy
Sheets("Feuil3").Select
Derlig = Range("A65536").End(xlUp).Row + 1
Cells(Derlig, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub


Ton code était presque correct, les 2 problèmes étaient :
1/ la double déclaration de Derlig
2/ avant le paste il faut selectionner la cellule

Cela doit fonctionner

A+
0

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

Posez votre question
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
6 mars 2009 à 23:44
Merco Pilas,

J'avance petit à petit.
J'ai créé un code suite à tes infos avec création d'un Tab Croisé Dyn et j'ai un nouveau problème ... !!!


J'ai tenté +sieurs macros
1ére macro: directement avec sélection de données comme tu m'as appris puis insertion d'un tab croisé dyn.
2éme macro: Création d'une page - Insertion d'un tab Croisé Dyn

Le problèmeapparaît dès la commande "activeworkbook"

Voici mon code:



Sub Import_données()
'
' Import_données Macro
'

'
ChDir "C:\Users\ct2017\Local"
Workbooks.Open Filename:="C:\Users\ct2017\Local\Extraction_Mois.xls"
'
Dim Derlig As Long
'
Sheets("Mois").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 7)).Copy
Windows("Stat.xls").Activate
Sheets("Année").Select
Derlig = Range("A65536").End(xlUp).Row + 1
Cells(Derlig, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Mois").Select
Derlig = Range("A65536").End(xlUp).Row + 1
Cells(Derlig, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'
Windows("Extraction_Mois.xls").Activate
ActiveWorkbook.Close
'
Sheets("Année").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 11)).Select
'
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Année!L1C1:L34C11", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Graph1!L4C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion10
Sheets("Graph1").Select
Cells(4, 1).Select

End Sub
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
8 mars 2009 à 18:47
Bonjour,

J'ai regardé ton problème et voilà la solution qui fonctionne chez moi :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Année!R1C1:R21C8").CreatePivotTable TableDestination:="Graph1!R4C1", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10

Juste une petite remarque, si tu veux que tout le tableau soit pris en compte pour le tableau croisé dynamique et si je reprends la fin de ton code, cela devient :
Sheets("Année").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 11)).Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Selection) _
.CreatePivotTable TableDestination:="Graph1!R4C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion10

Voilà mais attention cela ne fonctionne que la première fois puisque c'est une création.

A+
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
9 mars 2009 à 11:56
Bonjour Pilas,

Merci de ton attention.
Je n'arrive pas à avancer malgré tes infos.
Je me demande si cela ne provient pas de mon fichier.

Est il possible de t'envoyer mon support de travail afin que tu fasses des tests dessus?

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
9 mars 2009 à 16:33
Bonjour,

Oui tu peux déposer le fichier sur www.cijoint.fr et me donner le lien pour le télécharger.

A+
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
10 mars 2009 à 11:11
Salut Pilas,

voici le lien.

http://www.cijoint.fr/cjlink.php?file=cj200903/cijDwPvDNj.xls

J'ai ajouté dans le fichier l'onglet "extraction_Mois" qui normalement est un autre fichier.
Pour que la macro corresponde il faut extraire cette onglet et le coller dans un fichier du même nom avec en nom d'onglet "Mois"
De plus la macro fait référence à l'arborescence de mon poste il faudra que tu modifies, mais c'est toi le pro pas moi, donc tu dois savoir....

Je te remercie de ton attention*

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643 > fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
10 mars 2009 à 12:08
Salut,

Ok je regarde

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
10 mars 2009 à 17:19
Re Bonjour,

Voila, j'ai modifié ton classeur pour qu'il fonctionne. Tu trouveras ma version sur cijoint :
http://www.cijoint.fr/cjlink.php?file=cj200903/cijnL7RFCg.xls

Les principales modifications sont les suivantes :
1/ la fonction de création du TCD est corrigée
2/ Si le TCD existe déjà, on ne fait que modifier la source de données, s'il n'existe pas on le crée. Ainsi tu peux activer l'import régulièrement, le tableau se complète et le TCD se met à jour
3/ Il faut que la feuille Graph1 existe (je l'ai ajoutée, il ne faut pas la supprimer)
4/ j'ai pris l'initiative de corriger un peu les formules des colonnes de H à K pour que les cellules restent blanches lorsqu'il n'y a pas d'incident

Regardes le code de la macro et dis-moi s’il y a encore des problèmes ou s’il y a des choses que tu ne comprends pas.


A+
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
12 mars 2009 à 19:26
Salut Pilas,


Merci la macro fonctionne super.
Je tente de comprendre les commandes en faisant défiler la macro pas à pas.
Je tenterai de la comparer avec la macro originale pour identifier les erreurs.

Merci également pour la modif des formules.... je savais faire mais je n'ai pas prit le temps....

Petite question tout de même:

Si je souhaite rajouter un graphique via un TDC dois-je créér un nouveau TDC ?
J'ai tenté de la faire mais sans grand succès.... !!!
Comme d'hab ....

A+
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
12 mars 2009 à 22:21
Salut Fabnad,

Pour répondre à ta question non il n'est pas utile de créer un nouveau TCD. Par VBA il suffit de mettre les instructions suivantes :
    Charts.Add
    ActiveChart.SetSourceData Source:=Sheets("Graph1").Range("A4")
    ActiveChart.Location Where:=xlLocationAsNewSheet


Cela créé un graphique à partir du TCD de la feuille "Graph1" dans une nouvelle feuille.
Chaque fois que tu exécutes ce code, une nouvelle feuille est créée toujours à partir du même TCD.

A+
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
15 mars 2009 à 15:58
Salut,

Manip de copie dans une autre feuille ok

Par contre si je change les données dans le TCD cela me change les donnés dans le graph de la nouvelle feuille....!!!
Donc impossible de créer d'autres graph compétement différent par cette commande....

Donc je relance encore un SOS
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643 > fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
21 mars 2009 à 15:39
Bonjour,

Je viens de voir ta remarque.
Alors, rien ne t'empêche de créer un autre TCD dans une autre feuille à partir des mêmes données et un autre graphe à partir de ce nouveau TCD. Tu peux dupliquer le code et changer les noms de la feuille et du TCD...

A+
0