IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Regrouper plusieurs fichiers excel en un seul.


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Regrouper plusieurs fichiers excel en un seul.
    Bonjour,

    J'ai déjà créé à l'aide des ressources à ma disposition plusieurs petites applications en VBA, rien de bien méchant mais qui comme chacun sait, facilite grandement la vie.

    Aujourd'hui je cherche le moyen de compiler plusieurs fichiers excel en un seul. en farfouillant sur le web j'ai trouvé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Sub compiler()
     
     
    'Nécessite d'activer la référence
        'Microsoft ActiveX Data Objects x.x Library
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim xConnect As String, Cible As String
     
    Dim Fichier As String, Dossier As String, Feuille As String
    Dim i As Long
    Dim emplacement As String
     
    'la série à traiter. <<============ Ajouter par mes soins
    emplacement = InputBox("Quelle série dois-je traiter ?" & Chr(10) & Chr(10) & "Indiquer la série : ", "Série en cours de traitement", "01")
    'petit test pour éviter les soucis d'incohérence.
    If Len(emplacement) <> 2 Then
        MsgBox "Vous avez fait une erreur ! La série doit être renseignée avec 2 caractères ! (Exemple pour la semaine 4 saisir : 04)"
        emplacement = InputBox("Quelle série dois-je traiter ?" & Chr(10) & Chr(10) & "Indiquer la série : ", "Série en cours de traitement", "01")
        If Len(emplacement) <> 2 Then
            MsgBox "Série incorrect à nouveau, veuillez relancer la commande svp..."
            Exit Sub
        End If
    End If
     
     
    'nom du répertoire contenant les classeurs à regrouper
    Dossier = "C:\Documents and Settings\plancher\Bureau\test_quinc\" & emplacement & "\"
    'Nom de la feuille dans les classeurs fermés
    'Ne pas oublier le symbole $ après le nom de la feuille
    Feuille = "Feuil1$"
    i = 2
     
    'permet de ne pas cumuler plusieurs fois les mêmes nomenclatures
    Range("A2:L100").Delete
     
    Fichier = Dir(Dossier & "\*.xls")
    'boucle sur les fichiers du repertoire
    Do While Len(Fichier) > 0
        xConnect = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
        "ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
        'connection classeur
        Set Cn = New ADODB.Connection
        Cn.Open xConnect
     
        'Requete
        Cible = "SELECT * FROM [" & Feuille & "] ;"
     
        Set Rs = New ADODB.Recordset
        Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText
     
        'Ecriture dans la feuille de calcul
        If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
            i = Cells(i, 1).End(xlDown).Row + 1
     
        Rs.Close
        Cn.Close
        Set Cn = Nothing
        Set Rs = Nothing
        Fichier = Dir()
    Loop
     
     
    MsgBox "Réception des fichiers excel terminée."
    End Sub
    Au vue des commentaires et de mes premiers essais il semble fonctionner parfaitement.

    Hélas il ne copie pas parfaitement. en effet bien que ce soit via une requête il manque certaines cases de certaines lignes. Ainsi il se peut qu'il copie dans le fichier de destination le premier fichier parfaitement et qu'au second la ligne 6 colonne 4 se retrouve vide alors qu'elle ne l'est pas etc..

    Je ne vois pas d'où cela peut-il venir, ni ce que je peux y faire pour que cela fonctionne bien.

    Je vous remercie d'avance, et si vous avez besoin d'un exemple concret et/ou d'information supplémentaire n'hésitez pas à me les demander =)

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Sub compiler()
    'Nécessite d'activer la référence
    'Microsoft ActiveX Data Objects x.x Library
    Dim Cn As Object 'ADODB.Connection
    Dim Rst As Object ' ADODB.Recordset
    Dim xConnect As String, Cible As String
    Dim Fichier As String, Dossier As String, Feuille As String
    Dim i As Long
    Dim emplacement As String
    'la série à traiter. <<============ Ajouter par mes soins
    emplacement = InputBox("Quelle série dois-je traiter ?" & Chr(10) & Chr(10) & "Indiquer la série : ", "Série en cours de traitement", "01")
    'petit test pour éviter les soucis d'incohérence.
    If Len(emplacement) <> 2 Then
        MsgBox "Vous avez fait une erreur ! La série doit être renseignée avec 2 caractères ! (Exemple pour la semaine 4 saisir : 04)"
        emplacement = InputBox("Quelle série dois-je traiter ?" & Chr(10) & Chr(10) & "Indiquer la série : ", "Série en cours de traitement", "01")
        If Len(emplacement) <> 2 Then
            MsgBox "Série incorrect à nouveau, veuillez relancer la commande svp..."
            Exit Sub
        End If
    End If
    'nom du répertoire contenant les classeurs à regrouper
    Dossier = "C:\Documents and Settings\plancher\Bureau\test_quinc\" & emplacement & "\"
    'Nom de la feuille dans les classeurs fermés
    'Ne pas oublier le symbole $ après le nom de la feuille
    Feuille = "Feuil1$"
    i = 2
    'permet de ne pas cumuler plusieurs fois les mêmes nomenclatures
    Range("A2:L100").Delete
    Fichier = Dir(Dossier & "\*.xls")
    'boucle sur les fichiers du repertoire
     'connection Dossier
    Set Cn = CreateObject("ADODB.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Dossier & ";Extended Properties = text"
    Do While Len(Fichier) > 0
        'Requete
        Cible = "SELECT * FROM [" & Feuille & "] in '" & Dossier & "\" & Fichier & "' 'excel 8.0;HDR=YES""' ;"
        Set Rs = CreateObject("ADODB.Recordset")
        Rs.Open Cible, Cn
        For c = 0 To Rs.fields.Count -1
            Range("A1").Offset(0, c) = Rs(c).Name
        Next
        'Ecriture dans la feuille de calcul
        Cells(i, 1).CopyFromRecordset Rs
        i = Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1
        Rs.Close
        Set Rs = Nothing
        Fichier = Dir()
    Loop
    Cn.Close
    Set Cn = Nothing
    MsgBox "Réception des fichiers excel terminée."
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oh super merci =)

    La curiosité me pousserait à te demander le pourquoi du comment histoire de ne pas mourir idiot.

    Cela dit je ne suis pas sur de comprendre, et la solution directe me fait gagner un temps fou.

    Merci beaucoup =)

    Arf j'ai parlé trop vite.

    Effectivement une partie des manquants est apparue. Mais certaines restent toujours absentes :s

  4. #4
    Invité
    Invité(e)
    Par défaut
    je me connecte comme pour des fichier CSV/TXT! le répertoire devient un serveur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Dossier & ";Extended Properties = text"
    ensuite j'ouvre un RecordSet mais comme nous travaillons avec de fichier Excel je lui dit!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cible = "SELECT * FROM [" & Feuille & "] in '" & Dossier & "\" & Fichier & "' 'excel 8.0;HDR=YES""' ;"
    ICI je donne le diver! et ICI je lui dit que la première ligne est le nom des champs RS(c).Name

    dans ton fichier Excel, il doit y avoir des valeur de type texte et d'autre numérique! vue qu'ADO vérifie le type de champs (string; numérique;date) en se basant sur les 8 première ligne il doit pensé que c'est du numérique et place les valeur string à blanc, il faut lui dire que tu t'en fout!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cible = "SELECT * FROM [" & Feuille & "] in '" & Dossier & "\" & Fichier & "' 'excel 8.0;HDR=YES;IMEX = 1;""' ;"

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour ces explications.

    Désolé mais ça ne fonctionne toujours pas même avec la ligne nouvellement modifiée.

  6. #6
    Invité
    Invité(e)
    Par défaut
    peux tu placer un exemple de fichier en bidonnant le donnée, bien sur un exemple ou certaine données Apparaissent et d'autres non!

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    quincaillerie.xls
    test 655.xls
    test 654.xls
    test 656.xls

    Oui aucun risque sur les données ce sont des fichiers de test avec de fausses pièces.

    Le fichier quincaillerie.xls est celui qui regroupe les données des 3 autres sur la feuille 1, et en feuille 2 se trouve le traitement que je fais sur les données une fois importées.

    petite précision les données manquantes se trouvent colonne 4 : REFERENCE.

  8. #8
    Invité
    Invité(e)
    Par défaut
    la seule chose que j'ai trouvé, c'est:
    1) formater la colonne dans test 654.xls au fromat text
    2) modifier la base de registre
    a) ouvrir regedite
    b) sélectionner sur localmachine
    c) rechercher ImportMixedTypes
    d) passer TypeGuessRows à 0 pour que la recherche de type ce face sur tout la colonne!

    https://support.microsoft.com/fr-fr/kb/257819
    Images attachées Images attachées  

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    et il n'est pas possible de lui dire que tout ce qu'il importe est forcément au format texte ?

    Car derrière je teste les caractères donc ça ne poserait aucun soucis pour moi.

  10. #10
    Invité
    Invité(e)
    Par défaut
    c'est bien ce que je lui dis là IMEX = 1!
    mais il n'en tien pas compte?????§§§§§§

    j'ai chercher ALTER table pour excel afin de changer son type direct par sql



    ADODB ne veut que des champs type et par défaut c'est lui qui les type!

  11. #11
    Invité
    Invité(e)
    Par défaut
    bonjour,
    voilà ça marche, tu peux dires un grand merci à Docmarti.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cible = "SELECT * FROM [" & Feuille & "] in '" & Dossier & "\" & Fichier & "' 'excel 8.0;HDR=YES;IMEX=1;""' ;"

  12. #12
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, pour information, voir ici et adapter à ton contexte.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Technicien Bureau d'Etudes
    Inscrit en
    Septembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Bureau d'Etudes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Parfait super merci rdurupt et Docmarti !

    Vous m'ôtez une belle épine du pied et aller permettre d'économiser au final l'équivalent de 2h de temps chaque semaine

    kiki29 j'irai télécharger le dossier par curiosité pour voir les différences avec ce qui est déjà fait. Mais en dehors des heures de travail.

    Bon courage et Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel] Afficher plusieurs fichiers excel dans un seul fichier
    Par naru40001 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/01/2009, 14h50
  2. somme de plusieurs fichiers excel en un seul
    Par picxx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2008, 12h34
  3. Regrouper plusieurs fichiers Latex en un seul
    Par nollan dans le forum Mise en forme
    Réponses: 3
    Dernier message: 11/03/2008, 12h10
  4. regrouper plusieurs fichiers Excel en un seul
    Par jnmab dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2007, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo