[COLOR="DarkSlateGray"][B]Sub fiche()
Dim nom As String, data As Object, oCel As Range, enr As Object, ch, i As Integer
[COLOR="SeaGreen"]'Tableau de correspondance entre les cellules de la fiche et les champs _
de données du tableau. _
Le champ 1 (nom) va en B1 sur la fiche. Le champ 2 (prénom) va en B2, etc. _
Le premier élément du tableau ("") n'est là que pour occuper la position 0. _
L'avant dernier élément est "" car le champ 16 n'est pas utilisé.[/COLOR]
ch = Array("", "B1", "B2", "B3", "B4", "C6", "C7", "C8", "C9", "C10", "C11", "C12", "C13", "G2", "C20", "C21", "", "G1")
With ActiveSheet [COLOR="SeaGreen"]'Désigne la feuille active : c'est la fiche qu'on veut _
remplir (feuille visible).[/COLOR]
nom = .[B1].Value [COLOR="SeaGreen"]'On note le nom qu'on vient de mettre en B1 _
sur la fiche active.[/COLOR]
[COLOR="SeaGreen"]'On désigne par 'data' la partiede colonne A de la feuille _
"TAB Travail" contenant les noms.[/COLOR]
Set data = Sheets("TAB Travail").[A1].Resize(Sheets("TAB Travail").Cells(Rows.Count, 1).End(xlUp).Row, 1)
[COLOR="SeaGreen"]'Dans la boucle qui suit, on compare chaque valeur contenue dans la _
colonne A de la feuille "TAB Travail" ('oCel') au nom qu'on a inscrit _
en B1 de la fiche active.[/COLOR]
For Each oCel In data.Cells
If oCel.Value = nom Then Set enr = oCel.Resize(1, 17): Exit For [COLOR="SeaGreen"]'Si on _
a trouvé le nom, on désigne par 'enr' les dix-sept premières cellules de la _
ligne où on a trouvé le nom dans "TAB Travail" et on sort de la boucle.[/COLOR]
Next oCel
Set data = Nothing [COLOR="SeaGreen"]'Ligne "technique" : on libère la place occuppée en "vidant" _
la référence à la feuille "TAB Travail".[/COLOR]
If enr Is Nothing Then MsgBox "Nom inconnu": Exit Sub [COLOR="SeaGreen"]'Vérification qu'on a _
trouvé le nom cherché dans la feuille "TAB Travail". Si ce n'est pas le cas, _
on le signale par un message, puis on abandonne la procédure.[/COLOR]
Application.ScreenUpdating = False [COLOR="SeaGreen"]'Ligne technique : Interdicition du _
"rafraichissement" de l'affichage pour accélérer les opérations qui vont suivre.[/COLOR]
[COLOR="SeaGreen"]'Dans la boucle suivante, on lit successivement les valeurs trouvées dans les _
champs de la feuille "TAB Travail" pour les affecter aux cellules _
correspondantes dans la fiche active.[/COLOR]
For i = 1 To 17
If ch(i) <> "" Then .Range(ch(i)).Value = enr(1, i) [COLOR="SeaGreen"]' Traduction de _
cette ligne : si le ième élément du tableau 'ch' n'est pas la chaîne vide, _
alors affecter la ième valeur du tableau 'enr' à la cellule dont _
l'adresse est le ième élément du tableau 'ch'.[/COLOR]
Next i
Application.ScreenUpdating = True [COLOR="SeaGreen"]'Autorisation du rafraichissement de l'affichage.[/COLOR]
End With
End Sub[/B][/COLOR]