Macro excel Recherche
Résolu/Fermé
A voir également:
- Macro excel Recherche
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Aller à la ligne excel - Guide
7 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
29 oct. 2008 à 14:25
29 oct. 2008 à 14:25
bonjour
proposition:
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
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
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!
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!
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!
parce que actuellement la macro n'est pas très rapide.
Merci pour ce nouveau conseil!
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
29 oct. 2008 à 15:08
29 oct. 2008 à 15:08
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+
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+
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
29 oct. 2008 à 15:27
29 oct. 2008 à 15:27
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
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