Recherche de cellule

Bonjour à tous, j'espère que quelqu'un ici réussira a m'aider sur mon problème qui est sans doute tout simple.

Voila, dans le cadre de mon stage je dois créer une macro, qui quand je met " Absent " dans une cellule, sur la ligne avec une date précise et dans la colonne avec un ID précis dans la feuille 1, cela m'envoie dans la feuille 2 et me demande quelque chose, a l'aide d'une inputbox, avec la même date et le même ID que dans la feuille 1 et inversement quand je met quelque chose dans la feuille 2 que ça puisse mettre absent automatiquement dans la feuille 1 ou date = date et id = id.

Mon problème est que je n'arrive pas a faire cette recherche de cellule, j'aurais juste besoin d'un conseille pour savoir qu'est-ce qui ne va pas dans mon code et d'un peut d'aide pour résoudre mon problème ^^'

Merci ^^'

je vous fais part de mon code et de mon ficher excel

Option Compare Text

Dim Absence
Dim FpChantier, FpConge As Worksheet
Dim matricule, i, j
Dim ab As String
Dim cell As Range
Dim dte As Date

Sub Worksheet_change(ByVal Target As Range)

    Set FpConge = Sheets("Planning_Congé")
    Set FpChantier = Sheets("Planning_chantier")

'si Absent est entré dans la cellule a un matricule et une date précise
'alors dans Planning congé
'entre le type d'absence au même matricule et même date

If Target = "Absent" Then

   Worksheets("Planning_congé").Activate

    '''
    'recherche de la cellule correspondante a matricule et date
    '''
    matricule = FpChantier.Cells(5, Columns.Count).End(xlToLeft).Column
    For j = 6 To matricule - 4 Step 5
        On Error Resume Next
        ab = FpChantier.Cells(7, f).Value

        If Err > 0 Then Exit For
            Set cell = FpConge.Range("H7:AH750").Find(ab, lookat:=xlWhole)

            If Not cell Is Nothing Then
                sc = cell.Offset(0, 1).Select
                n = InStr(2, cell.Offset(1, 0), " ")
                dte = CDate(Mid(cell.Offset(1, 0), n + 1, 20))

                For i = 7 To FpChantier.Range("C" & Rows.Count).End(xlUp).Row

                    If FpChantier.Range("C" & i) = dte Then
                        Exit For
                    End If

                Next i
            FpChantier.Cells(i, j + 4) = sc

         End If
    Next j
    '''
    'proposer congé
    '''
    Absence = InputBox("Type de congé ?")

    ElseIf Target <> "Absent" Then
        Exit Sub
End If

End Sub
15projet-stage.xlsm (0.99 Mo)

bonjour,

en espérant que ceci pourra t'inspirer ...

Sub Worksheet_change(ByVal Target As Range)

    Set FpConge = Sheets("Planning_Congé")
    Set FpChantier = Sheets("Planning_chantier")

    'si Absent est entré dans la cellule a un matricule et une date précise
    'alors dans Planning congé
    'entre le type d'absence au même matricule et même date

    If Target = "Absent" Then
        matricule = FpChantier.Cells(5, Target.Column) 'matricule FPchantier
        dte = FpChantier.Cells(Target.Row, 3) 'dte FPchantier
        'recherche matricule dans congé
        Set cmatricule = FpConge.Rows("5:5").Find(matricule, lookat:=xlWhole)
        If cmatricule Is Nothing Then
            MsgBox "Matricule " & matricule & " non trouvé dans la feuille congé"
            Application.EnableEvents = False
            Target.Value = "" 'on enlève absent de la feuille Fpchantier
            Application.EnableEvents = True
            Exit Sub
        End If
        'on fait l'hypothèse que la même date se trouve sur la même ligne dans les feuilles chantier et congé
        ' mais on vérifie quand même
        If dte = FpConge.Cells(Target.Row, 6) Then
            '''
            'proposer congé
            ''' cellconge est la cellule qui correspond au matricule et à la date
            Set cellconge = FpConge.Cells(Target.Row, cmatricule.Column)
            FpConge.Activate
            cellconge.Select
            '
            Absence = InputBox("Type de congé ?")
            cellconge.Value = Absence
        Else
            MsgBox "la date " & dta & " ne se trouve pas sur la même ligne dans les 2 feuilles"
        End If
    End If

End Sub

Re-bonjour

Merci bien, mais je ne vois pas très bien ce que fait cette macro que vous m'avez envoyé.

Vous voyez je suis encore débutant dans le Visual Basic donc je ne connais pas encore tous ce qu'on peut faire avec.

Set cmatricule = FpConge.Rows("5:5").Find(matricule, lookat:=xlWhole)

De plus il y a une erreur de compilation : "objet requis" et je ne comprend pas pourquoi il y a cette erreur. Je suis sûr que cela doit être tout bête mais personnellement, c'est encore assez compliquer pour moi a ce stade, Désolé. ^^'

re-bonjour,

j'ai essayé de comprendre ce que tu voulais faire.

ce que j'ai compris.

tu veux proposer d'introduire un congé dans la cellule à l'intersection de la date et du matricule qui correspondent à la cellule dans laquelle tu as mis absent.

c'est ce que fait la macro.

target=cellule dans laquelle tu as mis absent

matricule = n° matricule correspondant à cette cellule

dte=date correspondant à cette cellule

on recherche ensuite le matricule dans congé, si trouvé cmatricule contient la cellule du matricule sur la feuille conge

pour la date on fait l'hypothèse qu'une même date est sur la même ligne sur les 2 feuilles (conge et chantier)

cellconge est la cellule dans laquelle il faut proposer d'introduire le congé.

cette macro fonctionne chez moi sur ton fichier.

si tu as l'instruction option explicit dans ton classeur, cmatricule et cellconge doivent être définis comme range

dim cmatricule as range
dim cellconge as range

Super je viens de comprendre,

Merci beaucoup

Rechercher des sujets similaires à "recherche"