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 dans excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut recherche dans excel
    bonjour,

    Voilà j'ai un fichier excel contenant 2 feuilles de données.
    La feuille 1 comporte énormement de lignes et de colonnes.
    Dans les colonnes 3,4 (et suivantes) de la feuille1 on trouve des données que je souhaites comparer aux données de la colonne1 de la feuille 2.
    Si je trouve le même texte je souhaite recopier dans une 3eme feuille la 1ere et 2eme colonne de la feuille1 et la 2eme colonne de la feuille2 correspondant aux données de la 1ere colonne de la feuille2. De plus si on ne trouve pas de donnée correspondante je souhaiterais que la case reste vide.
    Voici un exemple pour être plus claire :

    feuille1
    col1 | col2 | col3 | col4
    aaa | zzz | 123 | 857
    bbb | ppp | 456 | 123
    ccc | fff | 123 | 987
    ddd | ggg | 589 | 456
    eee | rrr | 25 |
    fff | yyy | 687 | 987

    feuille2
    col1 | col2
    123 | t1
    987 | t2
    589 | t3
    25 | t4
    456 | t5
    687 | t6


    feuille3
    col1 | col2 | col3 | col4
    aaa | zzz | t1 |
    bbb | ppp | t1 |
    ccc | fff | t1 | t2
    ddd | ggg | t3 | t5
    eee | rrr | t4 |
    fff | yyy | t6 | t2

    Merci d'avance si vous pouvez m'aider.

  2. #2
    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 : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour et bienvenue sur ce forum.

    Qu'as-tu déjà fait?
    As-tu un bout de code à nous montrer?
    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!

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut
    Bonjour,

    je suis désolée de ne pas vous avoir expliqué la situation.

    En fait je bosse dans un service info. Je suis plus dans le dépannage et on m'a filé un job de trouver la liste des utilisateurs qui ont accès à certains dossiers.
    Mais en fait ce n'est pas si simple, j'ai réussi à récupérer certaines infos qu'il faut que je recoupe.
    Le problème c'est que la prog et moi ça fait 2...
    J'ai trouvé des bouts de code qui m'ont donné des pistes mais j'y comprend rien en fait

    Voilà ca que j'ai pu trouver avec tentative de bidouillage perso mais ça marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim cel As Range
    'Dim col As Range
    'For Each cel In Worksheets("feuil1").Range("C1:IV2217").Cells
    '    For Each col In Worksheets("feuil2").Range("A:A").Cells
    '        If cel.Value = col.Value Then
    '            Worksheets("feuil3").Range("c1").Copy = cel.Value
    '        Else
    '            Worksheets("feuil3").Range("c1").Value = ""
    '        End If
    '    Next
    'Next
    ou bien

    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
    Dim MotCherche, L, C, InL, InC, OutL
    Dim Origine, recherche, Destination
     
    Set Origine = Worksheets("feuil1")
    Set recherche = Worksheets("feuil2")
    Set Destination = Worksheets("feuil3")
     
    MotCherche = "175273"
    InL = Origine.ActiveCell.SpecialCells(xlCellTypeLastCell).Row
    InC = Origine.ActiveCell.SpecialCells(xlCellTypeLastCell).Column
    OutL = Destination.ActiveCell.SpecialCells(xlCellTypeLastCell).Row
     
    For L = 1 To InL
      If Origine.Cells(L, 1).Value = MotCherche Then
        For C = 1 To InC
          Destination.Cells(OutL, C).Value = Origine.Cells(L, C).Value
        Next
        OutL = OutL + 1
        End If
    Next
    Voilà si qqun pouvait au moins m'aiguiller un peu

    Merci

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Un élément de réponse :
    Pour parcourir ta 1ère feuille, tu dois incrémenter ton N° de colonne à partir de la troisième, puis ton N° de ligne.
    Pour trouver les occurences correspondantes sur les autres feuilles, je te conseillerais d'utiliser Find
    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
    Début de la boucle sur le N° Ligne
        Feuille 1, tant qu'une donnée existe sur la ligne, colonne 1
        Copie des deux premières cellules de la ligne sur la feuille 3, colonne 1 et 2, ligne(n)
        Incrémentation du N° de colonne Feuille 1
        Début de la boucle 2 sur le N° de colonne, Feuille 1
        tant qu'une donnée existe dans la colonne de la ligne
            Lecture de la donnée
            Recherche feuille 2 de la donnée correspondante, colonne 1 
            (C'est ici que j'utiliserais Find)
                Si corresponce trouvée feuille 2 colonne 1 :
                    copie de la donnée feuille 2, colonne 2, sur la feuille 3, colonne "suivante" de la même ligne(n)
                Si Correspondance non trouvée -> rien
            Dans les deux cas, Incrémentation du N° de colonne feuille 3
            Incrémentation du N° de colonne feuille 1
        fin de boucle sur N° de colonne
    Poursuite de la boucle sur le N° de ligne Feuille 1
    Si ça correspond à ce que tu veux faire, pour le code, on verra après
    Tu dis

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    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
    dim [i]les feuilles et variables[i]
    set [i]ce qu'il faut[i]
     
     
    for i = 1 to nblignefeuil3
     
       reponse=feuil2.cells.find(feuil1.cells(i,3), feuil2.cells(1,1), xlvalues, xlwhole)
     
           if not reponse is nothing then
                feuil3.cells(i,3)=feuil2.cells(reponse.row, 2)
           end if
     
       reponse=feuil2.cells.find(feuil1.cells(i,4), feuil2.cells(1,1), xlvalues, xlwhole)
     
       if not reponse is nothing then
           feuil3.cells(i,4)=feuil2.cells(reponse.row, 3)
       end if
     
    next i
    reste a voir tous les bugs, mais ça me semble etre une base....si j'ai compris l'exemple...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Désolé, sk8bcn, mais je ne pense pas que tu prennes le pb dans le bon sens puisque tu fais :
    for i = 1 to nblignefeuil3
    alors qu'au départ, la feuille 3 n'a pas de ligne. Mais ce n'est qu'une supposition...
    Ceci dit, si tu indentais ton code, ce serait plus lisible (Bouton "Editer")
    Tu peux faire ça pour nous ? Merci

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    en fait, en prenant l'exemple, j'en deduis que la colonne 1 et 2 de la feuille1 est l'identique sur la feuille3.

    Sinon je boucle de i= 1 à nblignesfeuille1 et je copie la colonne 1 et 2 dans la feuille3. Je m'ajoute un compteur ligne sur la feuille 3

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Citation Envoyé par sk8bcn
    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
    dim [i]les feuilles et variables[i]
    set [i]ce qu'il faut[i]
     
    ligneenregistrement=1
     
    for i = 1 to nblignefeuil1
     
    test= false
     
       reponse=feuil2.cells.find(feuil1.cells(i,3), feuil2.cells(1,1), xlvalues, xlwhole)
     
           if not reponse is nothing then
                feuil3.cells(ligneenregistrement,1)=feuil1.cells(i,1)             
                feuil3.cells(ligneenregistrement,2)=feuil1.cells(i,2)
                feuil3.cells(ligneenregistrement,3)=feuil2.cells(reponse.row, 2)
                test=true
           end if
     
       reponse=feuil2.cells.find(feuil1.cells(i,4), feuil2.cells(1,1), xlvalues, xlwhole)
     
       if not reponse is nothing then
               feuil3.cells(ligneenregistrement,1)=feuil1.cells(i,1)             
                feuil3.cells(ligneenregistrement,2)=feuil1.cells(i,2)
                feuil3.cells(ligneenregistrement,4)=feuil2.cells(reponse.row, 2)
                test=true
       end if
     
       if test=true then
          ligneenregistrement=ligneenregistrement+1
       end if
     
    next i
    reste a voir tous les bugs, mais ça me semble etre une base....si j'ai compris l'exemple...

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, mais, dans
    reponse=feuil2.cells.find(feuil1.cells(i,3), ...
    tu cantonnes ta recherche sur la donnée de la colonne 3 de la première feuille or apparemment, ces données peuvent également se trouver sur les colonnes suivantes
    Mais je sens que tu tiens le bon bout... C'est Sand75 qui va être content

Discussions similaires

  1. Option recherche dans Excel 2007
    Par jawed dans le forum Excel
    Réponses: 2
    Dernier message: 12/06/2008, 10h44
  2. Techniques de recherche dans Excel
    Par Laura-c dans le forum Excel
    Réponses: 11
    Dernier message: 03/03/2008, 10h29
  3. Recherche "." dans Excel
    Par kenobyalex dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/01/2008, 11h33
  4. formule de recherche dans excel
    Par kroukse dans le forum Excel
    Réponses: 3
    Dernier message: 27/11/2007, 13h41
  5. Recherche dans Excel
    Par Golork dans le forum Bases de données
    Réponses: 7
    Dernier message: 22/03/2006, 20h21

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