[AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des lignes

gortex3D

XLDnaute Junior
Bonjour à tous

Mon chef m'a demander de faire un gros travail d'analyse sur nos chiffres clients entreprises.

Je dois avoir la semaine prochaine environ 1500 fichiers PDF qui représente les BLs de toute l'entreprise chaque jours. Chacun des fichiers à un tableau qui affiche le nom du client, la famille de produit qu'il a acheté, combien il l'a acheté et la marge que l'on fait sur le produit.

J'ai trouvé un logiciel qui me permet de convertir ces fichiers PDF en fichiers excel le soucis c'est qu'il me créé chaque page en onglet différent. Je souhaite donc dans un premier temps savoir si il est possible de compiler tout les onglets en un seul, à savoir que le logiciel ne propose pas de le faire (nitro 9).

Est il possible de fusionner tout les fichiers en un seul ce qui simplifiai le travail ?

Pour le moment avec des recherches j'ai trouvé comment surligner les lignes qui m'intéresse. =(GAUCHE($E2;3)="QS0") maintenant ce qui m'intéresserai se serai surtout de supprimer toutes les lignes qui ne comporte pas ces conditions.

Mon but final est d'isoler tout les clients qui achète un certain type de produit et d'en réaliser un fichier client avec le chiffre annuel et leurs adresses et numéros de téléphone.

Pouvez vous m'aider ?

Merci d'avance

Willy
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Bonjour ,

A concurrence du maxi de lignes par onglet , tu peux effectivement assembler plusieurs onglets en un seul, même s'ils sont dans plusieurs fichiers .

Bien sur ce sera du VBA,

la technique est simple si les onglets ont tous la même structure. ( Nombre et Nom de colonne et nature du contenu )
 

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Perso je n'ai jamais utilisé VBA par contre effectivement les fichiers ont tous la même structure sur le nombre de colonne et le nom des colonnes par contre le nombre de ligne est totalement aléatoire vu que c'est le nombre de bon de livraison de la veille au mois d'aout on a beaucoup moins de BL qu'en juin par exemple.

Pourrais tu m'éclairer pour assembler tout mes onglets et mes fichiers en un seul dans un seul onglet ? Mon premier fichier que j'ai pour travailler (j'ai demandé un fichier récent pour mes essais) fait 250 lignes, si je multiplie ca par 1500 fichiers je devrais être autour des 375 000 lignes avant de supprimer toutes les lignes qui ne m'intéresse pas. En gros dans mon fichier j'ai un peu prêt 10 lignes qui m'intéresse d'ou mon intérêt pour automatiser la recherche.
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Ok ,

L'on va commencer simple pour le principe

un seul fichier avec plusieurs onglets et le code d'assemblage et la synthese

Fichier joint pour exemple, tu débute , donc commenté et trés simple

Code:
Option Explicit

Sub Assemble()

'Déclaration des variables
Dim LigneFin1 As Long, LigneFin2 As Long

'Récupere la derniere ligne pleine de l'onglet données1
LigneFin1 = Sheets("Données1").Range("A" & Rows.Count).End(xlUp).Row

'Copie des données et de l'entete vers la synthese
Sheets("données1").Range("A1:K" & LigneFin1).Copy Destination:=Sheets("Synthese").Range("A1")

'Récupére la derniere ligne pleine de l'onglet synthese
LigneFin2 = Sheets("Synthese").Range("A" & Rows.Count).End(xlUp).Row

'Récupere la derniere ligne pleine de l'onglet données2
LigneFin1 = Sheets("Données2").Range("A" & Rows.Count).End(xlUp).Row

'Copie des données sans  l'entete vers la synthese
Sheets("données2").Range("A2:K" & LigneFin1).Copy Destination:=Sheets("Synthese").Range("A" & LigneFin2 + 1)



End Sub
 

Pièces jointes

  • copie Données_Classeur1.xlsm
    17.4 KB · Affichages: 43
  • copie Données_Classeur1.xlsm
    17.4 KB · Affichages: 51
  • copie Données_Classeur1.xlsm
    17.4 KB · Affichages: 55

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Merci pour ce code. Pour le moment je ne sais même pas comment accéder à VBA et non plus comment créer un bouton mais bon en copiant ton bouton dans mon fichier j'ai eu un bug (forcement mes onglets ne porte pas le même nom) mais le soucis est que mes fichiers n'auront pas forcement le même nombre d'onglet donc je ne pense pas que je puisse dupliquer le code pour chaque onglet en sachant qu'il est possible si par exemple je l'écris 10 fois et que je me retrouve avec un fichier que de 9 pages je risque d'avoir un bug, non ?

N'est il pas possible de connaitre le nombre d'onglet ( a savoir qu'il se nomme "page 1", "page 2", ... de faire -1 d'y intégrer une variable que l'on incrémente jusqu'au nombre d'onglet -1 ?
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Houlla ,

pas de panique,
alors pour accéder au vba touches ALt et F11 : un pas de plus.

Aprés si tu veux une solution clé en main sans rien comprendre dits le ?

J'essayais juste d'être didactitiel, bien sur que le code ne traite pas encore ton cas complétement , mais il aborde les principes.

y'a-t-il des onglets à ne pas extraire dans tes fichiers : Exemple , menu ou sommaire

Je te prépare un 2eme exemple ou l'on va travailler sur 2 classeurs dans le même dossier , 1 pour la synthese et le code ,et un simulant les fichiers obtenus par la conversion des PDF.

Ceci va nous rapprocher de ton cas de figure, le nombre de lignes est toujours adapté en automatique à l'onglet en cours
 

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Pour le fait d'associer les pages je viens de voire que je vais pouvoir utiliser temporairement un poste qui à acrobat au travail et qui va me permettre de convertir mes fichiers en excel sans avoir plusieurs onglets. Mon soucis est donc finalement surtout si possible de jumeler tout les fichiers en un seul.
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Le principe est le même ce n'est pas les fichiers eux même que tu vas assembler , mais bien le ou les onglets contenus à l'intérieur.

Avec mon 2eme exemple , le code comportera l'ouverture d'un classeur son traitement et sa fermeture, ensuite , il faut s'arranger à parcourrir une boucle qui scrute l'ensemble des fichiers d'un répertore, car j'espére que tous les fichiers sont dans un même répertoire
 

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Merci beaucoup pour ta patience et ton aide surtout qu'avec ton code je comprend un peu le principe (pour le modifier mais pas encore pour l'écrire). Pour les fichiers il porte le nom de "BL 07 09 2014" et oui ils seront tous dans le même dossier. Si je comprend bien en VBA, il est possible d'ouvrire plusieurs fichiers pour en copier le contenue et le coller dans un même fichier? Je ne pensais pas que VBA permettais de travailler en multifichier.
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Voici donc l'exemple 2

pour que cela fonction, il faut que les 2 fichiers joints soit copié dans un même répertoire.
 

Pièces jointes

  • copie Données_Classeur1.xlsm
    17.3 KB · Affichages: 33
  • Convertion PDF1.xlsx
    8.7 KB · Affichages: 36
  • copie Données_Classeur1.xlsm
    17.3 KB · Affichages: 39
  • copie Données_Classeur1.xlsm
    17.3 KB · Affichages: 45

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Désolé pour le délais de réponses, beaucoup de travail et bien occupé en ce moment (ma fille de 3 mois m'occupe bien :eek:). J'ai testé si je comprend bien ce code permet donc de fusionner le contenue de tout les onglets d'un fichier dans un autre. C'est franchement classe. Je commence à comprendre quelques trucs mais la j'ai un soucis tout de même. Comment la macro sélectionne le fichier qu'il doit ouvrir? Si j'ai bien compris il ouvre le premier fichier excel dans le dossier? Et si j'ai bien compris il s'arrête à un seul fichier ?

En tout cas merci pour l'exemple.
 

camarchepas

XLDnaute Barbatruc
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

Bonsoir,

Voici ajoutée une boucle pour la lecture de l'ensemble des fichiers d'un dossier

Nous arrivons quaisiment à ce que tu avais demandé.


Code:
Sub Assemble()

'Déclaration des variables
Dim LigneFin1 As Long, LigneFin2 As Long
Dim Chemin As String, Fichier As String
Dim Onglet As Worksheet
Dim Drapeau As Boolean
'Pour le coup l'on dira que le fichier de traitement est dans le même dossier que les fichiers de données
Chemin = ThisWorkbook.Path
'Raméne le nom du premier fichier ce trouvant dans le répertoire
Fichier = Dir(Chemin & "\*.xls")
Do

'Vérifie que le fichier n'est pas le fichier de traitement , si c'est le cas alors passe au suivant
If Right(Fichier, 5) = ".xlsm" Then Fichier = Dir

If Fichier = "" Then Exit Sub
'ouvre le fichier
Workbooks.Open Filename:=Chemin & "\" & Fichier

'Monte le drapeau indiquant le premier tour
Drapeau = True

'Parcours de l'ensemble des feuilles du classeur
For Each Onglet In Workbooks(Fichier).Worksheets

 'Récupere la derniere ligne pleine de l'onglet données1
  LigneFin1 = Onglet.Range("A" & Rows.Count).End(xlUp).Row
  
 'Copie des données et de l'entete vers la synthese
 If Drapeau Then: Onglet.Range("A1:K" & LigneFin1).Copy Destination:=ThisWorkbook.Sheets("Synthese").Range("A1")
 'Récupére la derniere ligne pleine de l'onglet synthese
  LigneFin2 = ThisWorkbook.Sheets("Synthese").Range("A" & Rows.Count).End(xlUp).Row
  'Copie des données sans  l'entete vers la synthese
 If Not Drapeau Then Onglet.Range("A2:K" & LigneFin1).Copy Destination:=ThisWorkbook.Sheets("Synthese").Range("A" & LigneFin2 + 1)
 'Baisse le drapeau puisque le premier tour est terminé
 Drapeau = False
'Reprend juste aprés le next avec l'onglet suivant s'il y en a un , sinon sort de la booucle
Next Onglet
'Ferme le classeur sans sauvegarde
Workbooks(Fichier).Close False

'Lecture fichier suivant
Fichier = Dir
Loop Until Fichier = ""
End Sub
 

gortex3D

XLDnaute Junior
Re : [AIDE] pour fusionner des onglets, fusionner des fichiers et supprimer des ligne

merci pour ta réponse. J'ai fait un essais ce soir en créant un deuxième fichier dans le dossier avec un contenu différent. Le deuxième fichier s'appelle 1test.xlsx malheureusement ces valeurs ne sont pas récupéré. On dirai que l'on ne lit que le fichier conversion mais ce que je ne comprend pas c'est que mon fichier qui commence par un 1 devrai être lut en premier si la boucle s'arrêtait à un seul fichier.

J'ai deux autres questions. Comment faire pour supprimer toutes les lignes qui par exemple ont dans la colonne H un 1 et tout ceux qui ont un zéro doivent être garder.

Est il possible dans une formule de faire afficher le resultat dans une autre case ? En gros j'aimerai créer un calcul par exemple dans la case B3 de la feuille de calcul "calcul" =base!H3*base!F3 et que le résultat s'affiche dans la feuille de calcul "base" case A3. Est ce faisable ?
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar