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
| Sub Save()
' Cherche si l'identifiant saisi existe grâce à la formule EQUIV (englobée dans un SIERREUR)
Dim Index As Long
Index = Evaluate("iferror(match(" & Range("saisie_ID").Value & ",t_Contacts[ID],0),0)") ' Renvoie la ligne du tableau si ID existe, sinon 0
If Index = 0 Then Index = Range("t_Contacts").ListObject.ListRows.Add.Index ' Si 0, crée une nouvelle ligne dans le tableau structuré
WriteData Index ' Appelle la procédure WRITE en lui passant le numéro de la ligne à modifier
End Sub
Sub WriteData(Index As Long)
' Transfère les données du formulaire dans la ligne du tableau souhaitée, cellule par cellule
Range("t_Contacts[ID]")(Index).Value = Range("Saisie_ID").Value ' Transfère le contenu de la cellule du formulaire qui contient l'ID sur la ligne souhaitée, dans la colonne de l'ID
Range("t_Contacts[Nom]")(Index).Value = Range("Saisie_Nom").Value ' Idem pour le nom
Range("t_Contacts[Prénom]")(Index).Value = Range("Saisie_Prénom").Value ' Idem pour le prénom
Range("saisie").ClearContents ' Nettoie la zone de saisie
End Sub
Sub Retrieve()
' Récupère le numéro de la ligne de l'ID pour les données que l'on veut transmettre au formulaire
' Transfère la ligne de l'ID si trouvée, sinon on affiche un message d'erreur
Dim ID As Long
ID = Range("saisie_id").Value ' Récupération de l'identifiant saisi dans le formulaire
If ReadData(ID) = 1 Then MsgBox "Identifiant inexistant", vbExclamation, "Recherche d'un contact" ' appelle la fonction ReadData en lui passant l'ID et teste le résultat. Si 0, OK, si 1, affichage du message
End Sub
Function ReadData(ID As Long) As Long
' Recherche l'ID dans la colonne ID du tableau et si trouvé, transfère les données dans le formulaire et renvoie 0. Si pas trouvé, renvoie 0
Dim Row As Long
Dim Source As Range
Row = Evaluate("iferror(match(" & Range("saisie_ID").Value & ",t_Contacts[ID],0),0)") ' Recherche de la cellule qui contient l'ID avec une formule EQUIV (MATCH en anglais)
If Row > 0 Then ' SI le numéro de la ligne est >0, l'ID existe et on transfère
Range("saisie_Nom").Value = Range("t_Contacts[Nom]")(Row).Value ' Transfert du contenu de la colonne Nom du tableau pour la ligne trouvée
Range("saisie_Prénom").Value = Range("t_Contacts[Prénom]")(Row).Value ' Idem pour le prénom
Else ' La ligne n'a pas été trouvée car l'ID n'existe pas dans le tableau
ReadData = 1 ' ReadData renvoi1 pour informer la procédure appelante que le transfert n'a pas pu être effectué
End If
End Function |
Partager