Re:Insertion d'une MACRO VBA dans une FORMULE XLS
Salit Hervé
Merci beaucoup pour ta réponse. C'est tres clair (en terme de pédagogie). je viens, grace a toi de comprendre que tu as les macros et les actions (d'ou module et feuille)
Je ne connaissais pas cette fonction; je viens de jouer avec; j'ai essayé d'en tirer quelque chose, mais, je rencontre un petit probleme technique :
Une fois que la cellule est remplie, le msgbox s'affiche a chaque fois que l'on rentre autre chose dans une autre cellule. Et je ne sais pas comment le conditioner pour ne tourner que une fois ...
J'explique:
J'ai un formulaire que je n'ai pas crée avec un userbox, mais directement dans un fichier; mes champs sont nommés (item_1, item_2, item_3 .....). Mes 6 premiers champs me permettent d'obtenir un numero d'enregistrement qui doit etre unique, et des que les 6 premiers champs sont rentrés, un 7ème [Numero] se crée automatiquement en concaténant les 6 autres.
A ce moment, la macro va vérifier que ce [Numero] n'a pas encore ete utilisé en faisant une RECHERCHEH sur un autre intercalaire (qui contient en plat tous les formulaires saisis environ 50 champs), cela evitera a l'utilisateur de rentre le meme formulaire plusieurs fois (errare humanum est)...
C'est pour cela que je recherchais un moyen automatique avant la validation finale du formulaire.
Maintenant je m'arrache les cheveux a determiner la zone de recherche de l'intercalaire non actif qui contient tous mes enregistrements a plat. Je penses que je vais arreter pour ce soir et partir a la mer.
Ma macro donne ca:
Private Sub Worksheet_Change(ByVal Target As Range)
'ce type de macro ne se déclenchent que lorsqu'un changement à eu lieu
'sur la feuille (origine Hervé - XLS Download Forum)
' But: vérifier que le numero du formulaire n'a pas déjà été soumis.
' Pour ce faire, concatenation de 7 champs avec conditions pour déterminer le
' numero d'identification dans le feuille Edit_Record sous le nom ID, puis verification dans la base.
'
' Les champs sont: item_1 (en H13), item_2 (en T13), item_3 (en AF13),
' item_4 (en H15), item_4a(en T15), item_4b(en AF15),
' item_5 (en H17)
'
' si la cellule composée de la concaténation des champs si dessus n'est pas vide
Dim Verif_ID, Numero_Trouve As String
Dim Zone_de_recherche As Range
Verif_ID = Worksheets('Edit_Record').Range('id').Value
If Verif_ID = '' Then
' alors on sort de la macro, et donc on ne fait rien
Exit Sub
'sinon
Else
' La je vais vérifier que ce numero n'a pas encore été utilisé en faisant
' un VLOOKUP (RECHERCHEV en francais) sur la feuille Database)
' Tout d'abord determiner la région a regarder dansl'intercalaire Database
Set Zone_de_recherche = Worksheets('Database').Range('a2', Range('a2').End(xlDown))
Numero_Trouve = Application.WorksheetFunction.VLookup(Verif_ID, Zone_de_recherche, 1, False)
If Numero_Trouve > 0 Then
MsgBox ('Attention numero deja utilise !!!!')
End If
'fin de condition
End If
End Sub
Apres, si le numero existe, je previens l'utilisateur afin qu'il corrige tout de suite ou change l'un des 7 champs.
en tous les cas, merci pour le coup de main.
Bon week-end a tous
JolieMaman007