'Oblige la déclaration des variables et objets
Option Explicit
'Ouverture de la function recherche ayant comme paramètres obligatoire nom et prénom
'elle renverra un numéro de ligne si trouvé et la premiere ligne libre si non trouvé
Function Recherche(Nom As String, Prénom As String) As Long
'Déclaration des objets zone pour le retour de la fonction find
Dim Trouve As Range, Trouve2 As Range
'Variables contenant un numéro de ligne
Dim Ligne As Long, Derligne As Long
'Calcul de la derniere ligne
Derligne = Range("B" & Rows.Count).End(xlUp).Row
'Recherche du nom dans la colonne B
Set Trouve = Range("B:B").Find(Nom, lookat:=xlWhole)
'Etiquette pour saut
Boucle:
'Si le nom est trouvé
If Not Trouve Is Nothing Then
'Si le paramètre prénom n'est pas vide
If Prénom <> "" Then
'Recherche du prénom dans la colonne C en commençant à la ligne ou le nom à été trouvé jusqu'a la derniere ligne de cette colonne
Set Trouve2 = Range("C" & Trouve.Row & ":C" & Derligne).Find(Prénom, lookat:=xlWhole)
'Si prénom trouvé
If Not Trouve2 Is Nothing Then
'Charge ligne avec le numéro de ligne contenant le prénom
Ligne = Trouve2.Row
'Si la ligne ou à été trouvé le prénom contient en colonne b le nom cherché et en c le prénom cherché alors
If Range("B" & Ligne) = Nom And Range("C" & Ligne) = Prénom Then
'Le retour de fonction renvoi le numéro de ligne
Recherche = Ligne
'Sinon
Else
'Recherche du suivant
Set Trouve = Range("B:B").FindNext
'Saute sur l'étiquette boucle
GoTo Boucle
End If
'Sinon
Else
Retour de fonction = 1° ligne disponible
Recherche = Derligne + 1
End If
'Sinon
Else
'Retour = ligne ou l'on a trouvé le nom
Recherche = Trouve.Row
End If
'sinon
Else
'Retour = 1° ligne dispo
Recherche = Derligne + 1
End If
End Function
Sub Formulaire()
'Chrgement + affichage du formulaire
UserForm1.Show
End Sub
Option Explicit
' Routine privée - uniquement disponible dans le userform
' Correspond au bouton ajout modifier
Private Sub CommandButton1_Click()
'Ajout, Modification
Dim Ligne As Long
'Appel de la fonction recherche
Ligne = Recherche(TextBox1.Text, TextBox2.Text)
'Copie de l'ensemble des box vers les cellules de la feuille
Range("B" & Ligne) = TextBox1.Text
Range("C" & Ligne) = TextBox2.Text
Range("D" & Ligne) = TextBox3.Text
Range("E" & Ligne) = TextBox4.Text
Range("F" & Ligne) = TextBox5.Text
Range("G" & Ligne) = TextBox6.Text
Range("H" & Ligne) = TextBox7.Text
Range("I" & Ligne) = TextBox8.Text
Range("J" & Ligne) = TextBox9.Text
'Cache le userform
Me.Hide
End Sub
'Bouton de sortie formulaire
Private Sub CommandButton2_Click()
'Sortie formulaire
'Cache le formulaire
Me.Hide
End Sub
'Lance la recherche
Private Sub Image1_Click()
'Recherche
Dim Ligne As Long
'Appel de la fonction recherche
Ligne = Recherche(TextBox1.Text, TextBox2.Text)
'recopie des cellules de la feuille vers les box du formulaire
TextBox1.Text = Range("B" & Ligne)
TextBox2.Text = Range("C" & Ligne)
TextBox3.Text = Range("D" & Ligne)
TextBox4.Text = Range("E" & Ligne)
TextBox5.Text = Range("F" & Ligne)
TextBox6.Text = Range("G" & Ligne)
TextBox7.Text = Range("H" & Ligne)
TextBox8.Text = Range("I" & Ligne)
TextBox9.Text = Range("J" & Ligne)
End Sub