Rechercher une valeur dans une ligne

Bonjour,

J'aimerai trouver dans une ligne la date présente dans un textbox, mais je pense que je dois avoir un souci de syntaxe.

Pour rechercher dans une colonne je n'ai pas de souci, mais dans une ligne ça pose problème !

voici mon code :

Sub test()
Dim col , lig as long

With Sheets("Planning gestion matériel")
            lig = .Columns(1).Find(ComboBox2.Value, LookIn:=xlValues, lookat:=xlWhole).Row
            MsgBox lig
            col = .Rows(4).Find(TextBox3.Value, LookIn:=xlValues, lookat:=xlWhole)
            MsgBox col
        End With

end sub

L'erreur 91 variable objet ou variable de bloc With non définie apparait à la ligne col = .Rows(4).Find(TextBox3.Value, LookIn:=xlValues, lookat:=xlWhole)

Si jamais quelqu'un trouve le souci je suis preneuse!

Merci !

Bonjour,

la syntaxe est correcte, mais tu peux recevoir ce genre de message lorsque le find n'a pas trouvé ce qui est demandé. Ici Le problème est plus que probablement lié à un format de données qui ne convient pas (textbox = type texte, dans ton classeur les dates sont probablement de type date). Difficile d'en dire plus sans fichier exemple représentatif.

Bonjour,

d'accord merci ! effectivement les dates dans mon classeur sont en format date. Y a il un moyen de convertir le contenu de mon textbox en format date ?

Bonjour, salut h2so4 !

Tu peux par exemple utiliser CDate(TextBox3.Value) à la place de TextBox3.Value seul.

Bonjour,

malheureusement le problème reste le même ...

En fait ma textbox est rempli via un calendrier. En choisissant la date, le textbox se rempli automatiquement

capture9

Ensuite, la disposition de ma feuille excel est la suivante :

capture10

Donc c'est peut être parce que l'affichage de mes dates sont différentes ? Pourtant en sélectionnant une cellule on retrouve bien les dates sous la forme "jj/mm/aaaa".

Bonjour,

Ta dernière réponse m'étonne, le format jj/mm/aaaa est de type 04/01/2021, or dans ta plage Excel c'est loin d'être le cas. Qu'indique ta barre de formule et le format de cellule personnalisé ?

Bonne soirée.

Bonsoir,

voici une copie d'écran de mon fichier excel :

capture11

La cellule sélectionnée est la H. Le format dans la barre de formule est bien le bon, et je suis en format date ...

Je ne vois donc pas ce qui pose souci ...

Bonjour,

Dis-moi ce que tu as en faisant cette manipulation dans le champ 5, au champ 2 il est nécessaire de sélectionner "Autre format numérique" :

date

bonsoir,

ceci fonctionne chez moi.

Sub aargh()
    d = InputBox("date")
    Set re = Rows(4).Find(format(CDate(d),"dd/mm/yyyy"), lookat:=xlWhole, LookIn:=xlValues) 'faire la recherche en mettant la date au même format que dans la feuille.
    If re Is Nothing Then
        MsgBox "date non trouvée"
    Else
        MsgBox "date trouvée en colonne" & re.Column
    End If

End Sub

il faudra sans doute remplacer dd/mm/yyyy par jj/mm/aaaa si tu es en version FR.

Bonjour,

Ergotamine : Alors effectivement je n'avais pas le bon format. Du coup j'ai bien changé en format "jj/mm/aaaa". Mais ça ne fonctionne toujours pas ...

H2SO4 : est ce que l'inpubox est ma textbox ? parce que si je mets " date_depart = TextBox3("date")" une erreur incompatibilité apparait.

Peut être qu'en vous fournissant le fichier ça serait plus simple ?

bonjour,

pour prendre la date date à partir d'une textbox voici la syntaxe

date_depart = TextBox3.value

ceci dit, il est toujours préférable de mettre un fichier.

une alternative à .find,

Sub aargh()
    d = InputBox("date à rechercher")
    'd=textbox3.value
    For i = 7 To Cells(4, Columns.Count).End(xlToLeft).Column 'on boucle sur les cellules (jusqu'à la dernière qui est non vide) de la ligne 4 en commençant en G
        msg = "date non trouvée"
        If CDate(d) = Cells(4, i).Value Then
            msg = "date trouvée en colonne " & i
            Exit For
        End If
    Next i
    MsgBox msg
End Sub

ça ne fonctionne toujours pas.

voici mon fichier.

Le problème se trouve dans le fichier "copie-de-gestion-du-materielmodif-lsa13.xlsm", dans l'useform1, au niveau de CommandButton1_CLick() correspondant à l'action de cliquer sur le bouton Valider.

En utilisant la dernière solution proposée, c'est à dire l'alternative à find, je n'obtiens aucune erreur, cependant, aucune correspondance n'est trouvée ..

bonjour,

ton code ne fonctionne pas chez moi, librairie manquante, mais

soit tu regardes ma dernière proposition (alternative à find), soit tu corriges ton code (et tu vérifies si cela fonctionne)

col_depart = .Rows(4).Find(Format(CDate(date_depart), "jj/mm/aaaa"), LookIn:=xlValues, lookat:=xlWhole)
            If col Is Nothing Then
                MsgBox "date non trouvée"
            Else
                MsgBox col_depart
            End If

il faut remplacer If col Is Nothing Then

par

If col_depart Is Nothing Then

bonjour, cela ne fonctionne toujours pas.

Pour que le code fonctionne il faut enregistrer les deux fichiers fournis, et modifier le chemin d'ouverture du fichier "Gestion loc materiel externe 21_LSA.xlsx" en fonction de l'emplacement où vous l'avez mis. Pour cela il faut aller dans la macro "ouvre_materiel_externe". Et normalement cela devrait fonctionner.

re-bonjour,

as-tu essayé ma proposition alternative à find ?

Sub aargh()
    d = InputBox("date à rechercher")
    'd=textbox3.value
    For i = 7 To Cells(4, Columns.Count).End(xlToLeft).Column 'on boucle sur les cellules (jusqu'à la dernière qui est non vide) de la ligne 4 en commençant en G
        msg = "date non trouvée"
        If CDate(d) = Cells(4, i).Value Then
            msg = "date trouvée en colonne " & i
            Exit For
        End If
    Next i
    MsgBox msg
End Sub

oui j'ai essayé, et ça me renvoi :

capture45

Bonjour,

mets ceci dans un nouveau module

Public Function finddate(d As String, r As Range) As Range
    cd = CDate(d)
    For i = 1 To r.Count
        If cd = r(i) Then
            Set finddate = r(i)
            Exit Function
        End If
    Next i
    Set finddate = Nothing
End Function

et modifie ton code ainsi

Dim col_depart As Range
'(...)
    date_depart=userform1.textbox3.value
    Set col_depart = finddate(date_depart, .Rows(4))
    If col_depart Is Nothing Then
        MsgBox "date non trouvée"
    Else
        MsgBox col_depart
    End If
    '(...)

Malgré ces modifications le code me renvoi une erreur :

capture15

et me surligne "date_depart" à la ligne : Set col_depart = finddate(date_depart, .Rows(4))

Rechercher des sujets similaires à "rechercher valeur ligne"