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 :

Recherche données dans plusieurs fichiers XLS avec argument


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Recherche données dans plusieurs fichiers XLS avec argument
    Bonjour à tous

    Cela fait plusieurs jours que je tourne sur le net mais je n'arrive pas à trouver la réponse à mon projet sur XLS.

    Je ne connait pas vraiment VBA la plupart du temps pour les choses simples je trouve sur le net

    Voici mon projet :

    1 fichier xlsx "récapitulatif des données".

    Je recherche via ce fichier un argument à remplir par l'utilisateur du fichier "un fournisseur par exemple"

    A l'aide d'un bouton d'action, il faut recuperer des données comme suit :

    - Rechercher dans le dossier "indicateur" tous les fichier xls commencant par "Taux de service XXXXXXXXX"
    - Aller à l'onglet "Tous" (des fichiers recherchés à la tache precedente)
    - Rechercher les lignes ou "le fournisseur renseigné" est present
    - Renvoyer les données de tous les fichiers dans l'onglet "données" du fichier de depart "récapitulatif des données" à partir de la cellule A2

    J'espère avoir été le plus clair possible...

    Je vous remercie d'avance pour vos réponses.

    Grégory

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Grégory, bonjour le forum,

    Pourrais-tu nous indiquer le chemin complet du dossier Indicateur ?
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    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, déjà dans la FAQ pour les classeurs fermés.
    en adaptant ceci pour lister les fichiers.

  4. #4
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Grégory, Kiki, bonsoir le forum,

    Ce code à placer dans le classeur récapitulatif des données qui devient donc .xlsm :
    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
    Sub Macro5()
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Object 'déclare la variable OD (Onglet Destination)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Object 'déclare la variable OD (Onglet Source)
    Dim BE As String 'déclare la variable BE (Boîte d'Entrée)
    Dim SF As Object 'déclare la variable SF (Système de Fichiers)
    Dim D As Object 'déclare la variable D (Dossier)
    Dim FS As Object 'déclare la variable FS (FichierS)
    Dim F As Object 'déclare la variable F (Fichier)
    Dim PA As String 'déclare la variable PA (Première Adresse)
    Dim LI As Integer 'déclare la variable LI (LIgne)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
     
    Set CD = ThisWorkbook 'définit le classeur de destination CD
    Set OD = CD.Sheets("données") 'définit l'onglet de destination OD
    Set SF = CreateObject("Scripting.FileSystemObject") 'définit la variable SF
    Set D = SF.GetFolder(CD.Path) 'définit la dossier D
    Set FS = D.Files 'définit l'ensemble FS des fichiers de D
    If FS.Count > 1 Then 'condition : si D possède au moinr un fichier
        BE = InputBox("Argument à rechercher", "RECHERCHE") 'définit la boîte d'entrée BE
        If BE = "" Then Exit Sub 'si BE est vide ou boton "Annuler", sort de la procédure
        For Each F In FS 'boucle sur tous les fichier F de D
            If Left(F.Name, 15) = "Taux de service" Then 'condition 2 : si le nom du fichier commence par "Taux de service"
                Workbooks.Open (F) 'ouvre le fichier
                Set CS = ActiveWorkbook 'définit le classeur source CS
                Set OS = CS.Sheets("Tous") 'définit l'onglet source OS
                Set R = OS.Cells.Find(BE, , xlValues, xlWhole) 'définit la recherche R
                If Not R Is Nothing Then 'consition 3 : si il existe au moins une ocurrence trouvée
                    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
                    LI = 0 'définit la ligne li
                    Do 'exécute
                        'définit la cellule de destination DEST (A2 si A2 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
                        Set DEST = IIf(OD.Range("A2").Value = "", OD.Range("A2"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
                        'copie la ligne de l'occurence trouvée et la colle dans DEST
                        'si la ligne de l'occurrence trouvée est différente de la ligne LI
                        If R.Row <> LI Then Rows(R.Row).Copy DEST
                        LI = R.Row 'définit la ligne LI
                        Set R = OS.Cells.FindNext(R) 'redéfinit la recherche R (occurrence suivante)
                    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelle occurrences ailleurs qu'en PA
                End If 'fin de la condition 3
                CS.Close SaveChanges:=False 'ferme le classeur source sans enregistrer
            End If 'fin de la condition 2
        Next F 'prochaine fichier de la boucle
    End If 'fin de la condition 1
    End Sub
    Ne fonctionne qui si le classeur récapitulatif des données.xlsm se trouve lui aussi dans le dossier indicateur sinon, remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set D = SF.GetFolder(CD.Path) 'définit la dossier D
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set D = SF.GetFolder(Chemin_complet_du_dossier_indicateur) 'définit la dossier D
    À plus,

    Thauthème

    Je suis Charlie

  5. #5
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Bonjour

    Le code fonctionne merci beaucoup !!

    Par contre le code pour que le fichier soit en dehors du dossier voulu ne fonctionne pas, c'est un lecteur reseaux...

    Avez vous une idée ?

  6. #6
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Grégory, bonjour le forum,

    c'est un lecteur reseaux...Avez vous une idée ?
    Ooops ! j'ai jamais codé avec des réseaux et je suis à peu près autant qualifié pour ça que l'équipe de France pour gagner la coupe du monde... Ça te donne une bonne idée de mon incompétence, non ?
    À plus,

    Thauthème

    Je suis Charlie

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Normalement, en donnant l'adresse réseau ça devrait fonctionner de la même manière.
    Montre-nous le code qui ne fonctionne pas ainsi que l'erreur qu'il provoque.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    pour adresser un folder réseau, faire comme suit en remplacant server_name par le nom DNS du serveur (ou l'IP) et path par le chemin sur le serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set D = SF.GetFolder("\\server_name\path")

    NB : Il faut, bien sûr avoir les droits d'accès sur l'endroit en question.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

Discussions similaires

  1. [Débutant] tracer des courbes avec des données dans plusieurs fichiers
    Par adila34 dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/06/2015, 20h51
  2. Réponses: 3
    Dernier message: 18/06/2014, 10h44
  3. [RegEx] remplacer des données dans plusieurs fichiers
    Par sam01 dans le forum Langage
    Réponses: 3
    Dernier message: 11/12/2007, 14h03
  4. Réponses: 3
    Dernier message: 14/03/2007, 15h30
  5. [vb6]:Ajuster des données dans un fichier text avec un timer
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 28/07/2006, 12h13

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