Rechercher une valeur dans une ligne

re-

ajoute une instruction dim pour donner un type string à date_depart

dim date_depart as string

ok ça tourne mais ça me revoit " date non trouvée" ...

edit : ça fonctionne pour le 04/01/2021, mais pas pour les 5 ou 6 autres dates testées..

re-bonjour,

essaie alors ceci

Set col_depart = finddate(date_depart, .Rows(4).cells)

re bonjour,

ça me renvoi un dépassement de capacité, avec r.count qui vaut à ce moment là 16384...

En fait ce que je veux faire au final c'est entrer "1" dans les cases du calendrier de la date de départ (textbox3), à la date finale (textbox4) de réservation pour un matériel sélectionné (combobox2). Cela permettra avec une mise en forme conditionnelle de bien délimiter la période d'utilisation demandée.

Peut être y a-t'il un code plus simple que celui que je suis en train d'essayer de faire ?

re-bonjour,

essaie ceci

Public Function finddate(d As String, r As Range) As Range
    Dim i As Long
    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

Sub test()
' code à adapter et à insérer dans ton userform1
    Dim plagedate As Range, date_depart As String
    With Sheets("planning gestion matériel")
        date_depart = InputBox("date départ")
        'date_depart=userform1.textbox3.value
        Set plagedate = Range(.Range("G4"), .Cells(4, .Cells(4, Columns.Count).End(xlToLeft).Column))
        Set col_date = finddate(CDate(date_depart), plagedate)
        If col_date Is Nothing Then
            MsgBox "date " & date_depart & " non trouvée"
        Else
            MsgBox col_date
        End If
    End With
End Sub

re bonjour!

Super ça fonctionne parfaitement !

Maintenant j'aimerai dans le cas "else" remplir la cellule (lig, col_date.column) par 1.

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

            date_depart = UserForm1.TextBox3.Value
            Set plagedate = Range(.Range("G4"), .Cells(4, .Cells(4, Columns.Count).End(xlToLeft).Column))
            Set col_date = finddate(CDate(date_depart), plagedate)
            If col_date Is Nothing Then
                MsgBox "date " & date_depart & " non trouvée"
            Else
                'MsgBox col_date & " " & col_date.Column & " " & lig
                .Range(lig, col_date.Column).Value = 1
            End If
        End with

Mais il me semble que la syntaxe .Range(lig, col_date.Column).Value = 1 n'est pas correcte. Pourtant quand je demande de me renvoyer col_date.Column c'est bien le numéro de colonne qui m'est retourné ...

bonjour,

remplace range par cells dans ton instruction

.Range(lig, col_date.Column).Value = 1

Super ! Merci beaucoup ça m'enlève une grosse épine du pied !

Rechercher des sujets similaires à "rechercher valeur ligne"