Insertion d'une MACRO VBA dans une FORMULE XLS ???

joliemaman007

XLDnaute Nouveau
Bonjour le Forum
J'ai une question de lien entre XLS et une Macro. J'ai écrit (tant bien que mal) une macro en VBA et je voudrais qu'elle se lance selon que certains champs dans une feuille xls ont été saisis (donc pas par click sur un bouton).

Je vais essayer d'etre plus precise:

J'ai formulaire qui n'est pas un User Form (je ne maitrise pas du tout alors je l'ai fait - pour moi - en simplifié en selectionnant des cellules sur une feuille excel que j'ai nommé)
Lorsque les 4 premiers champs sont saisis, un 5ème se crée automatiquement car il concatene ces 4, et c'est là que je voudrais pouvoir lancer ma macro VBA

Donc, ma question est:
Quelle formule permet d'apeler un programme vba ?
'exemple': =IF(MonnouveaChamps<>'',RUN MACRO,'')
que dois-je mettre a la place de RUn MACRO ?

Merci d'avance pour votre aide.

Jolie Maman.
 

Hervé

XLDnaute Barbatruc
Re:Insertion d'une MACRO VBA dans une FORMULE XLS

Bonsoir

une proposition que j'ai essayé pedagogique, en pièce jointe.

Salut
[file name=Classeur1_20050531220936.zip size=7045]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur1_20050531220936.zip[/file]
 

Pièces jointes

  • Classeur1_20050531220936.zip
    6.9 KB · Affichages: 34

joliemaman007

XLDnaute Nouveau
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
 

Hervé

XLDnaute Barbatruc
Re:Insertion d'une MACRO VBA dans une FORMULE XLS

Bonjour jolimaman007
re le forum

Une idée qui en est peut etre pas une :)

Tout dépend de ce que tu veux obliger l'utilisateur à faire en cas de saisie d'un numéro existant.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim plage As Range
Dim c As Range
Dim Verif_ID As String
Dim Zone_de_recherche As Range
Dim Numero_Trouve As Range

Set plage = Union(Range('item_1'), Range('item_2'), Range('item_3'), Range('item_4'), Range('item_4a'), Range('item_4b'), Range('item_5'))

For Each c In plage
If c = '' Then
Exit Sub
Else
Verif_ID = Verif_ID & c
End If
Next c

Set Zone_de_recherche = Worksheets('Database').Range('a2:a' & Range('a65536').End(xlUp).Row)
Set Numero_Trouve = Zone_de_recherche.Find(Verif_ID)

If Not Numero_Trouve Is Nothing Then
MsgBox ('Attention numero deja utilise !!!!')
Range('item_5').ClearContents
End If

End Sub

Principe, on boucle sur toutes les cellules nommées item, si celle-ci ne sont pas vide, on concatene leurs valeurs, sinon on sort de la macro.

puis on recherche dans la database si ce numéro existe, si oui, on envoi un message et on efface la derniere valeur rentré, si non , on continue le traitement.

J'espère avoir répondu correctement à ton interrogation.

Salut

edition : j'ai remplacé le vlookup par un find, plus pratique pour moi, à toi de voir.

Message édité par: Hervé, à: 03/06/2005 16:56
 

joliemaman007

XLDnaute Nouveau
Re:Insertion d'une MACRO VBA dans une FORMULE XLS

Hervé. Je te remercie pour tout.

Je vais re reflechir sur tout ca; et surtout avaler tout ce que tu más soumis. Le Find semble etre pas mal compare a recherche, et la routine bien plus courte et jolie que la mienne.

Je reviens sur le forum et vers toi des que j'ai avançe un peu plus.

merci encore

Jolie Maman


:)
 

Discussions similaires

Réponses
14
Affichages
704

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz