creer un fichier excel a partir de 3 (résolu) - VB/VBA/VBS - Programmation
Marsh Posté le 11-04-2007 à 16:09:24
TOUT EN SACHANT QUE LES LIAISONS NE FONT PAS CE QUE JE SOUHAITE CAR EN CAS DE D AJOUT OU DE SUPPRESION DANS L UN DES FICHIERS CELA NE SE REPERCUTE PAS CORRECTEMENT
PETITE INFO J AI AUSSI LE MEME ENTETE DE COLONNE DANS MES 3 FICHIERS
Marsh Posté le 11-04-2007 à 16:12:31
édite ton post, on n'aime pas trop les gens qui crient...
Marsh Posté le 11-04-2007 à 16:14:03
je ne crie pas
CT juste parceque j'ecrivais en majuscule autre part
Marsh Posté le 11-04-2007 à 18:07:53
Ces trois fichiers sont donc de forme identique ? (autant d'en-tête et libellé identiques ?)
Pourquoi ne pas copier tout un fichier d'un coup plutot que par copiers-collers successifs... je ne suis pas sur de tout saisir.
Marsh Posté le 12-04-2007 à 07:49:32
je peux faire un ctrlC et ctrlV sur les 3000 lignes de chaque fichier pour ensuite aller les mettre ou je veux
mais si je pouvais avoir un macro ou un truc qui me simplifierais la vie ce serait beaucoup mieux
mes entetes de collonnes sont les memes sur les 3 fichiers
correspondant au code client son nom son adresse complete et des informations commerciales
nos clients sont repartit par secteur de vente
et c est pour cela que nous avons 3 fichiers en sortie de notre logiciel commercial
Marsh Posté le 12-04-2007 à 10:30:07
Mais il faut impérativement que tu copies-colles chaque ligne indépendament, ou tu peux le faire par bloc (voire les 3000 lignes en même temps ?
Si tu dois les copier-coller indépendament, quel est leur critère de sélecton et à quel endroit doit-on les coller.
Essaie de me décrire précisément TOUT ce que tu veux faire (base+objectif)
Marsh Posté le 12-04-2007 à 10:50:53
bonjour,
non je peux copier tout en même temps.
A la base j'ai trois fichiers qui sont (à part les donnees sur les lignes) strictement identique.
Même entète de colonne et autant de colonne dans mes 3 fichiers.
En fait je lance une requête sur chacune de mes 3 bases clients, ce qui me donnent un fichier par base, ce fichier est un fichier excel.
Ce que moi je souhaite, c'est réunir TOUTES les lignes soit environ 3000 par fichiers (donc 9000 en tout) dans un seul fichier qui aura les mêmes entètes de colonne et les lignes les unes en dessous des autres pour donner à la fin un fichier de 9000 lignes.
Je souhaite en fait mettre mes 3 résultats dans le même fichier excel pour pouvoir ensuite le traiter, le classer et l'imprimer.
L'objectif est donc d'avoir toutes mes infos sur un seul et même fichier
car j'ai des recoupement à faire etant donné que je peux avoir le même client sur les 3 bases qui sont 3 secteurs différents de la sociétés (Vente, Maintenance et Consommable).
J'espère avoir donner sufisament d'info.
Je reste dispo.
Marsh Posté le 12-04-2007 à 11:02:02
Donc une macro qui copie, en bloc, toutes les données (entête exclu) des fichiers 2 et 3 pour les copier à la fin du fichier 1 te conviendrait ?
Marsh Posté le 12-04-2007 à 11:11:25
Après cette première phase brutale, la même macro pourrait trier, fusionner, réunir, dédoublonner certaines lignes de ce même fichier 1...
Marsh Posté le 12-04-2007 à 11:14:29
Oui une macro qui me copie tout dans un fichier serait niquel.
En fait pour le reste j'ai déjà trouvé et fait des macros à ma sauce, en modifiant des macros déjà existantes et que j'ai trouvé en fouinant sur le web.
Marsh Posté le 12-04-2007 à 12:50:12
Donc c'est très simple :
On considère que tes fichiers sont déjà ouverts (ils sortent de ta moulinette) et portent toujours le même nom :
Fichier 1 : "Export Base X"
Fichier 2 : "Export Base Y"
Fichier 3 : "Export Base Z"
ou un bout de nom tjs identique, de type :
Fichier 1 : "Export Base X au 21.03.2007"
Fichier 2 : "Export Base Y au 21.03.2007"
Fichier 3 : "Export Base Z au 21.03.2007"
On y va :
Sub fusion()
Dim NbCol As Integer, NbLine As Long, NbLine1 As Long
Dim Wbk As Workbook, Wbk1 As Workbook
'Recherche du classeur 1 parmi tous les classeurs ouverts :
For Each Wbk In Workbooks
'Recherche du bout de nom toujours identique du classeur 1
If InStr(Wbk.Name, "Export Base X" ) Then
'Ou recherche du nom complet si le nom complet est toujours identique
'if Wbk.name="Export Base X.xls" then
'On le nomme
Set Wbk1 = Wbk
'On compte le nombre de lignes de la feuille 1 du classeur 1
'En imaginant que c'est bien cette feuille sur laquelle on travaille
NbLine1 = Wbk1.Worksheets(1).Cells(65000, 1).End(xlUp).Row
'On sort de la boucle si on a trouvé
Exit For
End If
Next Wbk
'Recherche du classeur 2 et 3 (dans n'importe quel ordre a priori) parmi tous les claseurs ouverts :
For Each Wbk In Workbooks
'Recherche du bout de nom toujours identique
If InStr(Wbk.Name, "Export Base Y" ) Or InStr(Wbk.Name, "Export Base Z" ) Then
'Ou recherche du nom complet si le nom complet est toujours identique
'if Wbk.name="Export Base Y.xls" or Wbk.name="Export Base Z.xls" then
'Pas la peine de le nommer.. c'est le 2 ou le 3 au choix
'On compte le nombre de colonnes en se basant sur la ligne 1 (si ligne 1 = ligne en-tête
'sinon, adapter)
NbCol = Wbk.Worksheets(1).Cells(1, 256).End(xlToLeft).Column
'On compte le nombre de lignes en se basant sur la colonne 1 (si colonne 1 non vide
'sinon, adapter)
NbLine = Wbk.Worksheets(1).Cells(65000, 1).End(xlUp).Row
'Copie du bloc à partir de la ligne 2 (donc sans les en-tetes) + collage sur la dernière ligne + 1 de la feuille 1 du classeur 1
Range(Wbk.Worksheets(1).Cells(2, 1), Wbk.Worksheets(1).Cells(NbLine, NbCol)).Copy Wbk1.Worksheets(1).Cells(NbLine1 + 1, 1)
'On incrémente le nombre de lignes total de la feuille 1 du classeur 1
NbLine1 = NbLine1 + NbLine
'On ne sort pas de la boucle car il faut faire les 2 classeur
'Facultatif : On ferme le fichier
Wbk.Close
End If
Next Wbk
End Sub
A ce stade ton classeur 1 est rempli
Marsh Posté le 12-04-2007 à 14:31:30
euh comment te dire
MERCI
C EXCELLENT CA FAIT TOUT NIQUEL
MERCI MERCI MERCI MERCI
MERCI MERCI MERCI MERCI
MERCI MERCI MERCI MERCI
MERCI MERCI MERCI MERCI
MERCI MERCI MERCI MERCI
mon fichier ce remplir C trop bon
Marsh Posté le 12-04-2007 à 15:51:18
De rien.
De toutes facons, j'ai oublié qqchose :
il doit y avoir une ligne vide (indésirable) entre le bloc issu du fichier 2 et le bloc issu du fichier 3....
Il faut que tu écrives :
NbLine1 = NbLine1 + NbLine-1
à la place de :
NbLine1 = NbLine1 + NbLine
Voila.
Marsh Posté le 12-04-2007 à 15:54:26
oui j avais vu mais je pensais a une erreur de ma part
alors j ai supprimer a la main
merci je fais la modif de suite
Marsh Posté le 11-04-2007 à 15:44:24
Bonjour,
je suis à la recherche d'une macro ou d'une fonctionnalité sous excel qui me permetrait d'automatiser certaines taches.
En effet après passage à la moulinette de notre logiciel commercial, j'obtient 3 Classeurs excel contenant des informations telles que nom et adresse ainsi que les informations commercial du clients - chaque ligne correspondant à un client unique.
Avec ces fameux trois Classeurs, je cherche à les mettre dans un seul Classeur et dans la même feuille que je trirais apres avec des macros qui sont déjà en ma possession.
La solution un peu longue est de faire du copier coller avec ctrlC et ctrlV, mais ce traitement doit etre le plus simple possible et le plus rapide contenu de tout ce que je dois faire avec ce fichier,
donc si quelqu'un avait une solution facile à m'apporter je suis preneur.
Je suis déjà aller faire un tour sur le forum et je n'ai rien trouvé qui correspond à ce que je recherche.
Merci d'avance pour les réponses
Message édité par aculy le 12-04-2007 à 16:05:58