VBA: Extraction de données à partir de plusieurs fichiers

LBoy_75

XLDnaute Nouveau
Bonjour à tous,

je me permets de vous solliciter, car après avoir fait le tour de plusieurs forum dont celui d' Excel-download je n'arrive toujours à obtenir le résultat souhaité.

Ma situation actuelle:
Je débute tout juste avec vba car pour réaliser le travail que je dois faire les simple requêtes Excel ne suffisent plus.
J'ai réussi à faire un petit mashup de différents codes à partir d'éléments présent pris à droite ou à gauche, Mais là je ne sais pas comment faire.


Mon Objectif:

Je souhaiterais mettre en place une macro me permettant d'extraire facilement des adresses pour un publipostage.
Dans mon fichier [test.xlm] j'ai plus ou moins réussi à obtenir le résultat escompté, même si pour les villes je ne sais toujours pas comment faire pour retirer les quelques chiffres qui se baladent avant le nom de la ville.

Du coup ce je tente de faire depuis quelques jours, c'est d'extraire les données des fichiers Excel téléchargés afin d'obtenir une feuille un peu comme celle de mon fichier test dans laquelle je retrouverai mes 3 boutons ou 1 seul pour retraiter les données extraites afin d'obtenir de manière dissociée: le destinataire/ l'adresse/ le code postal/ la ville.

Mais le problème, c'est que les "bases de données" sont dans des feuilles qui ne portent pas un nom fixe. Du coup je ne sais pas comment faire.

Merci d'avance
 

Pièces jointes

  • projet extraction BDD.zip
    64.4 KB · Affichages: 137

JNP

XLDnaute Barbatruc
Re : VBA: Extraction de données à partir de plusieurs fichiers

Bonjour LBoy75 et bienvenue :),
En ce qui concerne la séparation propre, avec un petit RegExp, tu devrais avoir pas loin de 99% de bons résultats :rolleyes:...
Voir PJ :p !
Bon courage :cool:
 

Pièces jointes

  • Extraction.xlsm
    20.3 KB · Affichages: 366
  • Extraction.xlsm
    20.3 KB · Affichages: 396
  • Extraction.xlsm
    20.3 KB · Affichages: 408

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Je tiens à vous remercier pour votre réactivité, je vais essayer de suivre vos indications.
Merci JNP pr la PJ je vais essayer de comprendre un peu ce que tu m'as préparer et voir si j'arrive à boucler cette petite affaire :)
 

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Bonjour
2 solutions
tu peux utiliser le code name de chaque feuille
ou utiliser l'index des feuilles du classeur en le parcourant de 1 à sheets.count
Cordialement
Flyonets

Bonjour Flyonets,

Malheureusement, je ne pense pas avoir très bien compris tes indications pour parvenir au résultat escompté.

Par contre j'ai trouvé un bout de code pouvant m'aider mais le problème c'est que seules les feuilles "synth" sont extraites.

Or j'aurais besoin d'extraire des feuilles portant des noms différents selon les fichiers.
En règle générale, le fichier xls ne contient qu'une seule feuille qui portent le même nom que le fichier ouvert mais je ne sais pas comment faire !!

Si l'un d'entre aurait la solution je l'en remercie par avance. :)

Code:
Sub importDonnees()
Dim principal As ThisWorkbook
Dim repertoire As String, fichier As String
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = ThisWorkbook.Path
    ChDir repertoire
    fichier = Dir("*.xls")
    Do While fichier <> ""
        If fichier <> principal.Name Then
            Workbooks.Open fichier
            On Error GoTo suivant
            With Sheets("synth")
                On Error GoTo 0
                On Error Resume Next
                .[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                .[A:A].Insert Shift:=xlToRight
                .Range("A1:A" & .[b65536].End(xlUp).Row) = Left(fichier, Len(fichier) - 4)
                .UsedRange.EntireRow.Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
            End With
            ActiveWorkbook.Close False
        End If
suivant:
        If Err.Number = 9 Then MsgBox "Pas de feuille ""synth"" dans le fichier " & fichier, vbExclamation: ActiveWorkbook.Close False
        fichier = Dir
    Loop
End Sub
 

JNP

XLDnaute Barbatruc
Re : VBA: Extraction de données à partir de plusieurs fichiers

Re :),
Non testé :rolleyes:
Code:
Sub importDonnees()
Dim principal As ThisWorkbook
Dim repertoire As String, fichier As String
Dim Feuille As Worksheet
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = ThisWorkbook.Path
    ChDir repertoire
    fichier = Dir("*.xls")
    Do While fichier <> ""
        If fichier <> principal.Name Then
            Workbooks.Open fichier
            For Each Feuille In ActiveWorkbook
                With Feuille
                    .[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                    .[A:A].Insert Shift:=xlToRight
                    .Range("A1:A" & .[b65536].End(xlUp).Row) = Left(fichier, Len(fichier) - 4)
                    .UsedRange.EntireRow.Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
                End With
            Next Feuille
            ActiveWorkbook.Close False
        End If
        fichier = Dir
    Loop
End Sub
Bonne suite :cool:
 

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Re :),
Non testé :rolleyes:
Code:
Sub importDonnees()
Dim principal As ThisWorkbook
Dim repertoire As String, fichier As String
Dim Feuille As Worksheet
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = ThisWorkbook.Path
    ChDir repertoire
    fichier = Dir("*.xls")
    Do While fichier <> ""
        If fichier <> principal.Name Then
            Workbooks.Open fichier
            For Each Feuille In ActiveWorkbook
                With Feuille
                    .[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                    .[A:A].Insert Shift:=xlToRight
                    .Range("A1:A" & .[b65536].End(xlUp).Row) = Left(fichier, Len(fichier) - 4)
                    .UsedRange.EntireRow.Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
                End With
            Next Feuille
            ActiveWorkbook.Close False
        End If
        fichier = Dir
    Loop
End Sub
Bonne suite :cool:

Je tiens une nouvelle fois à te remercier, JNP pour ta réactivité et ton aide !
Je viens de tester ta solution mais il semble y avoir un problème au niveau de la condition [FOR EACH Feuille In ActiveWorkBook], du coup j'ai essayé avec ActiveWorkbook In fichier/Sheets/*/? mais bon ca n'a rien arrangé :eek:

Du coup je me demandais si tu aurais une solution à ce petit problème ou une autre solution.

Merci
 

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Je pense avoir trouvé l'erreur Ouf et un Très grand merci à JNP pour sa grande disponibilité et son aide. Merci JNP :) :)

Code:
Sub importDonnees()
Dim principal As ThisWorkbook
Dim repertoire As String, fichier As String
Dim Feuille As Worksheet
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = ThisWorkbook.Path
    ChDir repertoire
    fichier = Dir("*.xls")
    Do While fichier <> ""
        If fichier <> principal.Name Then
            Workbooks.Open fichier
            For Each Feuille In ActiveWorkbook.Worksheets
                With Feuille
                    On Error GoTo 0
                    On Error Resume Next
                    .[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                    .[A:A].Insert Shift:=xlToRight
                    .Range("A1:A" & .[b65536].End(xlUp).Row) = Left(fichier, Len(fichier) - 4)
                    .UsedRange.EntireRow.Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
                End With
            Next Feuille
            ActiveWorkbook.Close False
        End If
        fichier = Dir
    Loop
 

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Bonjour à tous,
je souhaiterais savoir si l'un d'entre vous pourrais m'expliquer pourquoi ma macro fonctionne parfaitement sur mon PC voir peut être sur Excel 2010 mais pas sous excel 2007/MAC et Works.

Merci d'avance
 

LBoy_75

XLDnaute Nouveau
Re : VBA: Extraction de données à partir de plusieurs fichiers

Re :),
D'après ce qui s'est écrit sur ce forum, Excel Mac 2007 et VBA ne font pas bon ménage :eek:...
Mac 2010 devrait fonctionner :rolleyes:...
Bon courage :cool:

En fait je voulais dire que sur un pc equipé d'excel 07 et sur un mac equipé d'excel ca ne marche pas j'ai une erreur de débogage qui m'indique que le Sub du début pose problème ca c'est sur le pc equipé excel 2007 puis sur mac c'est Dir "*.xls" qui est surligné.

Mais le problème c'est que Excel 2010 ne m'indique aucun probleme de compatibilité avec Excel 07

Du coup c'est un peu compliqué niveau exportation du travail !
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA: Extraction de données à partir de plusieurs fichiers

Re :),
Code:
Dim principal As ThisWorkbook
Y a comme un promzo :p...
Code:
Dim principal As Workbook
est correct :rolleyes:...
ChDir et Dir sous Mac, ça me parait pas gagné :p...
Essaie plutôt de le traiter dans ce style là :
Code:
Dim fd As FileDialog, Feuille As Worksheet
Dim Dossier As Object, Fichier As Object
Dim vrtSelectedItem As Variant
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
    If .Show = -1 Then
        Chemin = .SelectedItems(1)
    Else
        Exit Sub
    End If
End With
Set fd = Nothing
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In Dossier.Files
For Each Feuille In ThisWorkbook.Worksheets
' ton traitement
Next Feuille
Next Fichier
Bonne suite :cool:
 

Discussions similaires

Réponses
16
Affichages
465
M
Réponses
6
Affichages
440

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN