2 pièce(s) jointe(s)
Rechercher une valeur dans une liste qui apparait plusieurs fois, pour modifier une case de la ligne trouvé.
Bonjour,
J’ai pour objectif de réaliser un outil informatique pour améliorer la gestion du parc matériel de l'entreprise dans laquelle je fais mes études en alternance.
J'ai commencé à créer cet outil, avec EXCEL 2007 et VBA.
Je me suis beaucoup aidé du site et des différentes discussions que l'on peut trouver, mais je n'ai pas trouvé de solution à mon problème.
J'ai 3 feuilles Excel :
La première est une liste ou apparait le nom du matériel, le code d’identification, le type d’engins… etc
La seconde, est une liste des chantiers avec le nom des responsables du chantier
La troisième est une liste ou apparait les engins qui sont sortie, avec le code d’identification, la date de sortie du matériel, la date de retour du matériel… (Voir Imp – 1 ci-joints).
De plus, j’ai créé une boîte de dialogue, ou l’on peut y écrire le code d’identification du matériel et la date du jour (manuellement).
Le but, en validant cette boite de dialogue, est que la macro trouve la dernière ligne de la colonne (B) ou est écrit le code d'identification tapé dans la TextBox1, pour y écrire la date de retour du matériel, même ligne et colonne H.
J’ai essayé plusieurs "technique" mais à chaque fois, je trouve le premier ou le second code d'identification de la liste.
Voici, le code dont je me sers.
Est-ce le bon code dont je me sers ?
Si non, quels serait la meilleur méthode pour résoudre mon problème ?
En espérant être assez clair et précis.
Vous remerciant d'avance pour votre aide.
Cordialement
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| Private Sub CommandButton2_Click()
If Me.TextBox1.Value = "" Then
MsgBox "Veuillez indiquer un numéro d'identification, merci."
Me.TextBox1.SetFocus
Exit Sub
End If
If Me.TextBox2.Value = "" Then
MsgBox "Veuillez indiquer une date d'entrée/retour du matériel, merci."
Me.TextBox2.SetFocus
Exit Sub
End If
'Recherche de la derniere ligne ou est écrit le code d'identification rechercher (TextBox1)
'pour y inscrire la date de retour du matériel.
Dim premiereCellule As Range
Dim precedente As Range
Dim derniere As Range
Dim L As Long ' L numéro de la ligne ou est ecrit le dernier code d'identification
Dim DerLign As Long ' DerLign est la derniere ligne ou il y a un code d'identification
DerLign = Range("SituationMateriel!B1048576").End(xlUp).Row ' Pour éviter de rechercher sur les 1048576 Cellules de la colonne
With Worksheets("SituationMateriel").Range("B1:B" & DerLign)
Set C = .Find(TextBox1) '.Values 'Worksheets("SituationMateriel").Range("B1:B" & DerLign)
If Not C Is Nothing Then
Set premiereCellule = C
Do
Set precedente = C
Set C = .FindNext(C)
'Set derniere = C ' quand il aura fait la boucle derniere = premiereCellule (je pense)
Loop While C Is premiereCellule 'DerLign 'Is premiereCellule
L = precedente.Row 'precedente, car c sera = a la valeur de la boucle une fois boucler
Worksheets("SituationMateriel").Range("H" & L).Value = TextBox2 'écrire la date sur la bonne ligne
End If
End With
'Vide la BDD
Unload Me
Entree_Materiel.Hide
Choix_Action.Show
End Sub |