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 complexe de données [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut Recherche complexe de données
    Salut tout le monde,

    J'aurais voulu savoir s'il était possible sur la feuille 1 dans un classeur X de récupérer des données situées de part et d'autre dans des feuilles séparées mais dans le meme classeur le tout à partir d'une donnée commune mais pas forcément à la meme place dans chaque feuille et non triée par ordre alphanumérique.

    Ex :

    Donnée commune = P10
    Cette donnée est située sur Feuil 2 en A10, sur Feuil 3 en B4, sur Feuil 4 en F3 etc...

    Sur la Feuil 2 je désire récupérer les données des cellules B10, D10 et G10
    Sur la Feuil 3 je désire récupérer les données des cellules B4, C4, F4 et G4
    Sur la Feuil 4 je désire récupérer les données des cellules C3, D3, K3, V3 et Y3

    Ensuite plusieurs solutions possibles soit j'ai sur la Feuil 1 en A2 une liste déroulante me proposant de sélectionner la donnée point de départ de la recherche (ici P10) mais j'aurais aussi (P20,P30,S10,S21,S22,S30 Etc...)
    soit j'ai par le biais d'une macro une boîte de dialogue me demandant de saisir la donnée d'entrée (ici P10).

    Toujours sur cette feuille 1, j'aurais ensuite en B2 la donnée récupérer sur la Feuil 2 en B10 puis en C2 la donnée Feuil 2 D10, en D2 => Feuil 2 G10, en E2 => Feuil 3 B4, et ainsi de suite jusqu'à E11 => Feuil 4 Y3.
    Sur la Feuil 1 ligne 1 j'ai mes titres des données recueillies.

    Faut il passer par une macro, une recherche V (sur différentes feuilles non triées), les filtres élaborés normaux ou par macro ?????

    Auriez vous une idée, si oui comment vous y vous prendriez vous ?

    Cordialement.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    en respectant exactement ton exemple, voici ce code que tu pourras adapter, j'ai pris 3 feuilles pour les donnees à reprendre et les cellules que tu as citées, j'oublie ton "Etc."
    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
    Sub recup()
    Dim tb, tb2, tb3, tb4, x As Long, y As Long, Mess As String, Ch As Long
    Dim WS As Worksheet, a As Long, z As Long
    Ch = 0: a = 1
    Mess = InputBox("valeur à récupérer")
    tb2 = Sheets("Feuil2").UsedRange
    tb3 = Sheets("Feuil3").UsedRange
    tb4 = Sheets("Feuil4").UsedRange
    For Each WS In Worksheets
      For x = 1 To WS.UsedRange.Rows.Count
        For y = 1 To WS.UsedRange.Columns.Count
          If WS.Cells(x, y) = Mess Then Ch = Ch + 1 'pour la 1ère dimension du tableau "tb"
        Next y
      Next x
    Next WS
    ReDim tb(1 To Ch, 1 To 25) 'derniere colonne "Y"
    For x = 1 To UBound(tb2, 1)
      For y = 1 To UBound(tb2, 2)
        If tb2(x, y) = Mess Then
          tb(a, 2) = tb2(x, 2) 'prend la donnée de B10
          tb(a, 4) = tb2(x, 4) 'prend la donnée de D10
          tb(a, 7) = tb2(x, 7) 'prend la donnée de G10
          a = a + 1
        End If
      Next y
    Next x
    For x = 1 To UBound(tb3, 1)
      For y = 1 To UBound(tb3, 2)
        If tb3(x, y) = Mess Then
          tb(a, 2) = tb2(x, 2) 'prend la donnée de B4
          tb(a, 3) = tb2(x, 3) 'prend la donnée de C4
          tb(a, 6) = tb2(x, 6) 'prend la donnée de F4
          tb(a, 7) = tb2(x, 7) 'prend la donnée de G4
          a = a + 1
        End If
      Next y
    Next x
    For x = 1 To UBound(tb4, 1)
      For y = 1 To UBound(tb4, 2)
        If tb4(x, y) = Mess Then
          tb(a, 3) = tb2(x, 3) 'prend la donnée de C3
          tb(a, 4) = tb2(x, 4) 'prend la donnée de D3
          tb(a, 11) = tb2(x, 11) 'prend la donnée de K3
          tb(a, 22) = tb2(x, 22) 'prend la donnée de V3
          tb(a, 25) = tb2(x, 25) 'prend la donnée de Y3
          a = a + 1
        End If
      Next y
    Next x
    Sheets("Feuil1").Range("A2").Resize(UBound(tb, 1), UBound(tb, 2)) = tb 'à partir de A2, on intègre le résultat
    End Sub
    edit : ci-joint le fichier de mon essai
    Fichiers attachés Fichiers attachés
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    ça ne fonctionne pas bien.

    Voici un fichier exemple juste pour l'idée car je ne peux pas mettre le vrai fichier (confidentiel).
    Les feuilles et cellules a extraire sont différentes sur mon vrai fichier mais l'idée est là.
    Pouvoir extraire les cellules colorées dans l'exemple a partir d'un input box ou liste déroulante.
    Ici j'ai pris pour exemple la recherche sur M30

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Je comprends que ça ne fonctionne pas, ta demande initiale m'a l'air différente,, maintenant tu travailles sur des feuilles qui ne sont pas structurées de la même façon (plusieurs tableaux dans une même feuille), c'est une autre Histoire ::
    Je ne crois pas pouvoir t'aider dans l'immédiat.

    Ce que je t'ai envoyé au regard tes 1ères dexplications, je regrette mais, la réponse était correcte

    Bon courage
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Oui c'est vrai tu as raison ,je me suis mal expliqué dans le post #1, j'aurais dû dire : faire une extraction dans des feuilles et zones aléatoires non triées.

    Je crois bien qu'il n'y a pas de solution pour ce genre de casse tete.

    Encore merci a toi je prend tout de meme ta macro car ton code est tres interessant, je m'en servir avec une autre idée.

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonjour,
    Tu abandonnes très vite graphikris
    Bien sur que c'est possible, mais ça ne se fait pas d'un coup de baqguette magique
    Dans le code tout dépend de l'imagination que tu as (afin de trouver la meilleure solution (qui ne soit pas une usine à gaz)) et de l'experience

    Citation Envoyé par casefayere Voir le message
    Je ne crois pas pouvoir t'aider dans l'immédiat.
    je suppose qu'il ne peut pas le faire pour le moment mais peut être plus tard

    Pour ma part, dans les indications données par ton fichier excel, dans le code tu auras :
    - une boucle pour avoir la valeur à trouver (P10,…)
    - une boucle pour passer sur chaque feuille
    - un find ou qq ch qui permettra de trouver la valeur recherchée afin de copier par la suite les infos adjacentes de ta feuille lambda sur ta feuille principale
    (pour l'une des feuilles il y aura aussi Union)
    ça c'est pour le pricipal
    après il y aura un travail supp, à savoir au moment ou tu relance ta macro ne pas remettre les mêmes infos déjà copier précédemment

    Et bien sur le tout, à condition que tout soit bien structuré, et du travail

    Edit : D'ailleurs ça ne serait pas ta feuille 2 qui servirait pour la recherche de ta valeur??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Non je n'ai pas abandonné car je cherche encore,
    Voici le code que je viens de créer mais ça ne fonctionne pas à cause du mot "Processus" que j'ai mis à la place de $A$2 à la ligne 9

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Requete_Extraction_Donnees_Processus()
     
        Dim Processus As String
     
        Processus = InputBox("Veuillez saisir le processus à extraire :" & Chr$(13) & Chr$(13) & "Liste des processus :" & Chr$(13) & Chr$(13) & "M10 - M20 - M30 - M40" & Chr$(13) & Chr$(13) & "P10 - P20 - P30 - P40" & Chr$(13) & Chr$(13) & "S10 - S20 - S30 - S40" & Chr$(13) & Chr$(13) & Chr$(13) & Chr$(13) & "ATTENTION : la saisie est obligatoire.", "PROCESSUS")
     
         Range("B2").Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(Processus,Feuil2!R[-1]C[-1]:R[18]C[7],MATCH(Feuil1!R1C2,Feuil2!R[-1]C[-1]:R[-1]C[7]),FALSE)"
        Range("B3").Select
    End Sub

  8. #8
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    re,
    Voilà qq exemples/indications codes pour avancer => d'après ton fichier excel afin de te guider dans le code
    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
    Sub Rch()
    MsgBox Feuil2.UsedRange.Find("M30", , xlValues, xlWhole).Address
    End Sub
     
    Sub Val()
    Dim VA, R As Long
    VA = Feuil2.UsedRange.Resize(, 1).Value
     
    MsgBox "Ubound est égal à : " & UBound(VA)
     
    For R = 2 To UBound(VA)
        MsgBox Feuil2.UsedRange.Find(VA(R, 1), , xlValues, xlWhole).Value
    Next
    End Sub
     
    Sub Feuilles()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.Name <> "Feuil1" Then
        MsgBox sh.Name
        End If
    Next
    End Sub
     
    Sub Copie()
    Dim VA, R As Long, MaRef, DerL As Long
     
    VA = Feuil2.UsedRange.Resize(, 1).Value
     
    MsgBox "Ubound est égal à : " & UBound(VA)
     
    For R = 2 To UBound(VA)
        DerL = Feuil1.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Le + 1 pour la 1ere ligne vide
        MsgBox "La 1ère ligne vide est : " & DerL
     
        Set MaRef = Feuil2.UsedRange.Find(VA(R, 1), , xlValues, xlWhole)
        MsgBox MaRef.Value & " - " & MaRef.Address
        Feuil1.Range("A" & DerL).Resize(, MaRef.CurrentRegion.Columns.Count).Value = Feuil2.Range(MaRef.Address).Resize(, MaRef.CurrentRegion.Columns.Count).Value
    Next
    End Sub
    Autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Mon_Processus()
    Dim VA, DerL As Long
     
    MonProcessus = InputBox("Veuillez saisir le processus à extraire :" & Chr$(13) & Chr$(13) & "Liste des processus :" & Chr$(13) & Chr$(13) & "M10 - M20 - M30 - M40" & Chr$(13) & Chr$(13) & "P10 - P20 - P30 - P40" & Chr$(13) & Chr$(13) & "S10 - S20 - S30 - S40" & Chr$(13) & Chr$(13) & Chr$(13) & Chr$(13) & "ATTENTION : la saisie est obligatoire.", "PROCESSUS")
     
    With Feuil2
        DerL = Feuil1.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Le + 1 pour la 1ere ligne vide
        MsgBox "La 1ère ligne vide est : " & DerL
        Set VA = .UsedRange.Find(MonProcessus, , xlValues, xlWhole)
        Feuil1.Range("A" & DerL).Resize(, VA.CurrentRegion.Columns.Count).Value = Feuil2.Range(VA.Address).Resize(, VA.CurrentRegion.Columns.Count).Value
    End With
     
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. [VBA] code pour recherche automatique de données
    Par lg022 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/02/2007, 10h20
  2. [Recherche] Diagramme des données
    Par un_passant dans le forum 2D
    Réponses: 9
    Dernier message: 29/11/2006, 09h34
  3. WHERE - Recherche "complexe"
    Par Donald08 dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/08/2006, 14h35
  4. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27
  5. [LDAP] comment s'y prendre pour faire une recherche complexe
    Par dervish dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/03/2006, 14h56

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