fonction FIND

knaekes

XLDnaute Occasionnel
Bonjour,

je souhaite retrouver la valeur affichée dans une cellule dans une plage de donnée située sur une autre feuille. comment y parvenir grâce à la fonction "FIND" ?

merci

Code:
Sub essai()

Set f2 = Sheets("1.2")
Set fc = Sheets("Calendrier")

d2 = f2.Cells(2, 3).Value

With fc.Range("E3:E2284")
Set C = .Find(d2, LookIn:=xlValues)
linkw = C.Row
MsgBox (linkw)
End With



End Sub
 
G

Guest

Guest
Re : fonction FIND

Bonjour,

A priori ce serait ceci, pour plus adapté à ton cas, joint un fichier exemple.

Code:
Sub essai()
    Set f2 = Sheets("1.2")
    Set fc = Sheets("Calendrier")
    d2 = f2.Cells(2, 3).Value
    With fc.Range("E3:E2284")
        Set c = .Find(d2, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
        If Not c Is Nothing Then
            linkw = c.Row
            MsgBox (linkw)
        End If
    End With
End Sub
A+
 
G

Guest

Guest
Re : fonction FIND

Bonjour,

Les recherches de dates avec Find, sont toujours aléatoires et fonctionnent rarement.
Dans le fichier joint une autre méthode qui renvoie la première cellule correspondant à la date cherchée.

D'où l'intérêt de tout dire quand on pose une question et de joindre un fichier.

A+
 
G

Guest

Guest
Re : fonction FIND

Bonjour Gruick,

Il s'agit simplement d'utiliser Application.Match avec comme paramètre un 'Long', cela fonctionne avec les dates sans heure derrière.

dim idx as variant

idx = Application.Match(clng(LaDateAtrouver), .Range("E3:E2284"), 0)

If Not isError(idx) then ....


Voici la macro écrite dans le fichier joint plus haut:

Code:
Sub essai()
    Dim f2 As Worksheet, fc As Worksheet
    Dim d2 As Long
    Dim c As Range
    Dim idx As Variant 'doit rester variant
    Set f2 = Sheets("1.2")
    Set fc = Sheets("Calendrier")
    d2 = CLng(f2.Cells(2, 3).Formula)
    
    idx = Application.Match(d2, fc.Range("E3:E2284"), 0)
    If Not IsError(idx) Then
          Set c = fc.Range("E3:E2284").Cells(idx, 1)
          MsgBox "La date est la " & idx & " ème de la plage de recherche " & vbCrLf & "la cellule correspondantes est la cellule " & c.Address
    End If
End Sub

A++
 
G

Guest

Guest
Re : fonction FIND

Re,

Petite précision:

Si la date à recherchée est dans une cellule (ex A1) il vaut mieux faire appel à :Clng(Range("A1").Value2) qui renverra toujours un double (qui sera convertit par clng). Range("A1").Value renvoie un type Date.

A+
 

Al capone

XLDnaute Junior
Re : fonction FIND

Bonjour à tous,

On m'a suggéré d'aller voir ce topic car j'ai aussi besoin de chercher des dates dans mon tableau mais par rapport à une date saisie. J'ai adapté le code ainsi :

Code:
Dim ChercheX As Date
ChercheX = CDate(tmp1)
  
    Dim f2 As Worksheet, fc As Worksheet
    Dim d2 As Long
    Dim c As Range
    Dim idx As Variant 'doit rester variant
    Set fc = Sheets("Trains supprimés")
    d2 = CLng(ChercheX)
     
    idx = Application.Match(d2, fc.Range("C5:C50"), 0)
     If Not IsError(idx) Then
           Set c = fc.Range("C5:C50").Cells(idx, 1)
           MsgBox "La date est la " & idx & " ème de la plage de recherche " & vbCrLf & "la cellule correspondantes est la cellule " & c.Address
     End If

ChercheX prend par exemple la valeur : 05/07/2011.(saisi via un inputbox)
Dans mon tableau, colonne C5 à C50, il peut y avoir plusieurs fois cette date et j'aimerais que quelqu'un puisse me l'adapter car pour moi la finalitée est de supprimer toutes les lignes qui comportent la date saisie... La MsgBox ne n'est pas nécessaire....

Merci beaucoup
 

Al capone

XLDnaute Junior
Re : fonction FIND

Re,

C'est bon j'ai trouvé :

Code:
For x = 5 To DerniereLigne
    maligne = "C" & x
    idx = Application.Match(d2, fc.Range(maligne), 0)
    If Not IsError(idx) Then
     Rows(x).Delete
     End If
     Next x
Bon certains vont rire .... devant mon adaptation d'amateur........
 

Discussions similaires

Réponses
2
Affichages
176

Statistiques des forums

Discussions
312 500
Messages
2 089 005
Membres
104 003
dernier inscrit
adyady__