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
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