Problème de fusion de fichiers

sylkan

XLDnaute Nouveau
Bonjour à toutes et tous!

Ca commence à faire pas mal de jours que je traîne sur un blème de consolidation ou fusion!

Bon, j'expose comme je peux :

Je désire créer un classeur indépendant (j'y tiens) à partir de 1 à C classeurs (variable).
Chaque classeur contient 1 feuille.
Cette feuille contient de 1 à L lignes (variable avec un maximum 14 lignes ).
Chaque ligne comporte 5 cellules.
En gros, j'ai un certain nombre de bons de commandes (nombre variable par mois) chacun de ces bons correspond à un classeur.
Tt les classeurs sont dans un même répertoire nommé : 200609
Chaque classeur nommé contient une feuille nommée "cde" et sur chaque feuille, il y a un nombre variable (1 à 14 lignes mais au moins une) de ligne(s) détaille(s).
Toutes les commandes du mois se trouvent dans un répertoire. Pour septembre : 200609; Pour octobre : 200610, etc...
Je souhaite reprendre chaque ligne détail de chaque feuille de chaque classeur pour en faire un nouveau classeur excel que je pourrai triturer dans tout les sens. Sur chaque ligne détaille (5 colonnes), j'aimerai en plus prendre le n° de commande ainsi que la date de la commande venant de l'entête de la commande.

Pour l'exemple, je joins 3 bons de commande:
http://www.forum-openoffice.org/ci-joint/fichier/2006/10/12-082840.xls
http://www.forum-openoffice.org/ci-joint/fichier/2006/10/12-082926.xls
http://www.forum-openoffice.org/ci-joint/fichier/2006/10/12-082952.xls
Pour le classeur de sortie, je n'ai pas de contraintes, il faut juste qu'il y ai le n° du bon de cde, la date et les 5 colonnes par ligne détail.

J'imagine qu'il faut effectivement faire du Vba, et bonjour la programmation! je suis débutant en excel, quand au vba, mon niveau n'est même pas homologué!

Il est impossible que je sois le 1er et le seul à avoir à traiter ce genre de blème!
J'ai bien commencé par faire des recherches, mais, les posts qui pourraient être intéressant sont vieux comme mes robes et les exemples ne sont plus disponible;

Alors, le défit reste à relever!
Encore merci d'avance
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

Bonjour
c'est une manip que tu veux faire souvent? En effet, faut-il considérer que tu risques d'ouvrir et récupérer le même fichier?

sinon c'est possible. Quelles colonnes veux-tu et dans quel ordre?
 

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Bien le bonjour Eric et merci d'avoir tenté qq chose!

Pour répondre à tes questions de ce matin, c'est une manipulation à faire à chaque fin de mois et seulement 1 fois pour consolider les commandes du mois! Et je souhaite recuperer la date de la commande, le n° de la commande (ou le nom du classeur puisqu'ils sont identique) et les 5 colonnes de chaque ligne détail. Pour l'ordre des colonnes, aucune importance, du moment que je retrouve par ligne les 7 colonnes.

2) j'ai installé le fichier que tu as mis dans ta réponse au niveau du catalogue (contenant les classeurs à traiter) puis, j'ai lancé ton .xls et cliqué sur le bouton. il ne dit qu'il y a 23 fichiers, ce qui est exact. mais, dès le 4ème classeur, il fait une erreur d'execution "6", dépassement de capacité
et je n'ai récuperé aucune ligne détail!
Sinon, tu as fait un sacré boulot et tu ne dois pas être loin de la solution.
Après le dépassement de capacité, l'option débug à ouvert la macro que tu as créé! (je me demande bien comment j'aurai pu réaliser ça!!!)
Merci encore
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

re

il faudrait en premier que tu fasses l'essai avec les fichiers que tu as mis sur le forum, cela permettra d'être à égalité ;) et vérifier le fonctionnement de base

sinon tes fichiers sont'ils gros (peut-on dépasser en global 65000 lignes)

tout tes fichiers ont-ils les infos au même endroit (sinon pb)

quand tu passes en debug tu as une ligne qui s'éclaire en jaune, cela peut permettre de comprendre
 

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Bien le bonjour Eric!

Bien vue!
le blocage se produit sur une petite macro qui me sert à calculer le n° de commande à chaque ouverture du classeur
Voilà la macro: (je souligne la ligne d'erreur )
Sub Compteur()
Dim oldno As Integer
Dim newno As Integer
oldno = Sheets("compteur").Range("a1").Value
newno = oldno + 1

MsgBox "n° de commande :" & newno
Sheets("compteur").Range("a1").Value = newno
Sheets("cde").Range("b16").Value = "B0" & newno
End Sub
cette macro s'execute à l'ouverture de chaque classeur commande! le "oldno" est iscrit sur une autre feuille du classeur nommée "Compteur"
La macro que tu construis n'est pas responsable du bug! mais comment faire cohabiter les 2 macros.
D'ailleurs, je ne devrais plus faire executer la mienne au moment de l'open (sinon, le n° de cde va progresser) mais, comme il n'y a pas de "ThisWorkbook" au moment du "SAVE AS", comment la lancer à ce moment là?


Il y a peu de fichiers; Pour 1 mois, si on atteint 100 cdes, c'est le bout du monde, Ce qui devrait donner sur le fichier de sortie 1 millier de lignes au grand maxi! Bon, doublons ou triplons les lignes par sécurité, on est bien loin des 65000 lignes (hélas);

Tt les fichiers ont le même format; Seul le nombre de lignes détailles est variable (de 1 à 14);

Si tu veux, je peux t'envoyer 2 ou 3 commandes réelle en mp!
Merci encore et à charge de revanche, (mais pas en burautique!)
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

Bonjour

effectivement j'avais mis la macro en commentaire, ne connaissant pas le projet.

une question tu as un fichier modèle et les fichiers que tu scrutes sont des sauvegardes (si oui la macro ne leur sert pas)?

sinon en général sur des fichiers modèles j'incrémente à la fermeture en remettant les plages utilisateur à "vide" et dans ce cas tu peux refermer avec un savechanges=false dans le cas de ta manip
 
Dernière édition:

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Hello!

Je n'avais pas de fichier modèle, je repartais chaque fois de la dernière cde enregistrée. Je viens de faire un modèle du quel je repartirai désormais! ;)

A part ça, ta macro semble ne prendre qu'une cde (la dernière) et ne pas s'arrêter sur la dernière ligne de la commande (arrêt sur la 1ère ligne blanche ou ligne 38 au maximum)

Je te joins les fichiers reels sans les données privées;

Cde 1 : http://cjoint.com/?kskYGk5XtU

Cde 2 : http://cjoint.com/?kskZXfhX6R

Cde 3: http://cjoint.com/?ksk0z0V5SO


et par exemple pour le fichier recap : http://cjoint.com/?kskTwFtK7V

Désolé, si j'avais donné les bonnes infos, tu en aurais déjà terminé avec moi!
Mais, l'expérience est une longue suite d'erreurs! je prends une bonne leçon! :rolleyes:
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

Re

plusieurs choses:

pour ta numérotation ta macro se déclenche toujours avec certains des fichiers

tes fichiers ont plusieurs feuilles, il faut donc dans ma macro modifier

fenêtrelue = ActiveWorkbook.Name

en

fenêtrelue = ActiveWorkbook.Name
Sheets("CDE").Activate

je me fie à la colonne A pour la longueur de zone hors il y a des infos en dessous de ta zone produit. Il faudrait que les bas de page soient tous identiques pour modifier

Range("A25:E" & Range("A65536").End(xlUp).Row).Copy
en
Range("A25:E" & Range("A65536").End(xlUp).Row - ??).Copy
 

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Hello Eric!

En 4 heures d'essai, j'ai juste réussi à diminuer la taille de ton bouton de lancement (indépendament de mon plein gré) et
modifier les 2 lignes que tu m'as indiqué en remplacant les 2? par 38 puisque c'est la dernière ligne détail possible.

Pour le reste de mes essais, c'est pas brillant;
Je me retrouve avec un tas de cochonneries à la place de mes lignes détailles. Enfin, je dis cochonnerie, mais ce sont des éléments contenus dans l'entête de ma commande.
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

Bonjour

si tu es sûr que 38 est ta dernière ligne possible

if not range("A38).value ="" then
'si A38 rempli
Range("A25:E" & Range("A38").Copy
'Sinon recherche ligne remplie
else
Range("A25:E" & Range("A38").End(xlUp).Row).Copy
end if

devrait fonctionner A vérifier

Je démarre un stage donc pas là avant ce soir
 

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Bonjour Eric!

Ouuuppps ?????

Oui, je suis sûr que la 1ère est et sera toujours la 25 et la 38ème sera toujours au maximum la dernière!
De plus, il n'y aura jamais de ligne vide entre 2 lignes detailles!

Vers où je dois mettre le morceau de code que tu indiques!

Et en attendant ton retour, Bon stage! et @+
 

sylkan

XLDnaute Nouveau
Re : Problème de fusion de fichiers

Bien le bonjour Eric!

Bravo, c'est la réponse au problème que j'ai posé!

Naturellement, j'ai des questions subsidiaires. Mais, si tu trouves que tu en as assez fait, je comprendrais parfaitement.

1) Je crois comprendre que la ligne 2 de ton fichier est obligatoire pour aller chercher l'emplacement des informations!

2) Quelle est l'instruction qui te permet de retrouver les colonnes que tu récupères? car j'aimerai récupérer des colonnes "A" à "G"! (oui, je sais, ce n'était pas dans le postulat de départ, mais, tu m'ouvres des horizons. LOL). En réalité, j'imaginai en parlant de lignes détailles qu'elles seraient reprises comme un string ou un block

3) Les colonnes "B", "D" et "F" contiennent des formules, comment récupérer l'information "calculée" au lieu de la formule?

Oui, je sais, je suis pénible, mais quand je vois le travail que tu as fait.
De plus, je pense que le résultat de ton travail devrait être placé sur le forum car il doit répondre à bon nombre de questions que se posent les débutants!

Merci encore
 

ERIC S

XLDnaute Barbatruc
Re : Problème de fusion de fichiers

re

1/ pour pouvoir modifier le nom du sous répertoire j'utilise
chemin = ThisWorkbook.Path & "\" & Sheets("Lisez-moi").Range("C7").Value & "\"

le nom est en C7 de la feuille lisez-moi

on pourrait écrire en dur

chemin = ThisWorkbook.Path & "\200609\"

2/ derligne a déterminé la dernière ligne et je copie de A à E
Range("A25:E" & derligne).Copy

3/au lieu d'un paste faire:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Ce code peut facilement être obtenu par l'enregistreur de macro qui dépanne souvent même si le code n'est pas optimum (outil macros nouvelle macro puis tes manips puis arrêter macro). alt F11 et code généré à regarder dans les modules
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 233
Messages
2 086 466
Membres
103 225
dernier inscrit
PAPA ALIOUNE HANE