Macro excel Recherche

Résolu
Caribou -  
 Caribou -
Bonjour,

je souhaiterais créer une macro...Voilà ce que je voudrais lui demander de faire :
- j'ai une donnée, dans la feuille 1 en D15,
Je voudrais qu'elle cherche D15 dans la feuille 2, dans la première colonne,
quand elle trouve la donnée de D15, elle renvoie le résultat associé qui se trouve dans la 4ème colonne de cette feuille. Il faut qu'elle renvoie le résultat tant qu'elle trouve la donnée D15.
Et il faut que l'intégralité des résultats soient affichés dans la feuille 1, en C21, C22, C23, etc.

J'espère avoir été clair.

Je vous remercie d'avance pour votre aide!
Configuration: Windows 2000
Internet Explorer 6.0

7 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour

    proposition:

    Sub chercher_D15()
    Dim occ
    Dim c As Range
    Dim lig1 As Long, lig2 As Long
    
    Application.ScreenUpdating = False
    With Sheets(1)
    occ = .Range("D15")
    Range("C21:C65536").ClearContents
    End With
    
    With Sheets(2)
    If Application.CountIf(.Columns(1), occ) = 0 Then  'column(1) 1°colonne: colA
        MsgBox "valeur inconnue"
        Exit Sub
    End If
    'd'après aide Excel sur fonction Find
    With .Range("A:A")
        Set c = .Find(occ, LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            lig1 = 21
            Do
                lig2 = c.Row
                Sheets(1).Cells(lig1, 3) = .Cells(lig2, 4)  '4 4°colonne:colD
                lig1 = lig1 + 1
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    End With
    
    end sub


    ATTENTION: si D15 contient une date, il faut modifier un peu la macro...

    Tu me dis le résultat des courses, merci d'avance

    edit: rectifié erreur manquait un end with
    0
  2. Caribou
     
    Merci beaucoup Michel

    elle marche parfaitement, je vais juste réduire le nombre de ligne puisque je n'en ai qu'environ 1000.

    Ensuite je vais faire la démultiplier pour renvoyer les informations d'une autre colonne.

    Encore *MERCI* beaucoup, je suis trop content!
    0
  3. Caribou
     
    Par contre, comment faire pour réduire le nombre de ligne où la macro fait sa recherche?
    parce que actuellement la macro n'est pas très rapide.

    Merci pour ce nouveau conseil!
    0
  4. Caribou
     
    C'est bon j'ai tout trouvé, voilà ce que ça donne au final :

    Sub chercher_D15()
    Dim occ
    Dim c As Range
    Dim lig1 As Long, lig2 As Long

    Application.ScreenUpdating = False
    With Sheets(1)
    occ = .Range("D15")
    Range("C21:C50").ClearContents
    With Sheets(2)
    If Application.CountIf(.Columns(1), occ) = 0 Then '1°colonne: colA
    MsgBox "valeur inconnue"
    Exit Sub
    End If
    'd'après aide Excel sur fonction Find
    With .Range("A1:A1000")
    Set c = .Find(occ, LookIn:=xlValues)
    If Not c Is Nothing Then
    firstAddress = c.Address
    lig1 = 21
    Do
    lig2 = c.Row
    Sheets(1).Cells(lig1, 3) = .Cells(lig2, 4) '4=4)colonne:col D
    lig1 = lig1 + 1
    Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
    End With
    End With
    End With
    Set c = Nothing
    End Sub

    J'ai rajouté un bouton et le tour est joué. MERCI
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    devant cette ligne
    Range("C21:C65536").ClearContents
    ajoute un point:
    .Range("C21:C65536").ClearContents

    Pour la rapidité, Find est le + rapide car il ne boucle que sur les valeurs=D15

    peut-être est ce ta "démultiplication"

    ou peut -^etre essayer avec des filtres mais...

    excuses mais j'ai des trucs sur le feu...
    a+
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Re,

    intrigué par ta remarque

    je viens d'essayer avec quelques >=3500 valeurs D15

    temps passé: environ 1sec ( 512 mo RAM, AMD sempron 3 Mhz)

    en cogitant un peu, je panse qu'un systeme filtre ne serait pas + rapide
    0
  8. Caribou
     
    oui oui en fait je crois que c'est mon pc^^ , je viens d'essayer sur un autre PC et tout va bien!

    Je suis en pleine démultiplication et ça fonctionne. Merci
    0