Créer une fenetre en VB

MARIE74

XLDnaute Occasionnel
Bonjour a toutes et a tous
Méto pluie orage 22° (region megeve 74)

je souhaite que l' information suivante
"Attention Vérifier si l'opération de dégazage est necessaire"
" OK "
apparaisse sous la forme d'une fenetre, et que cette fenetre doit pouvoir etre fermée par un clic sur OK
et cela uniquement si un mot de la liste suivante est renseigné dans une ou plusieurs cellule de A22 a A51

T.TH
T.Thermique
Thermique
Traitement
HV
HB
HRC
Zingage
Zn
Znbi
Surface
T.Surface
10,9
12,9
Classe
Carbonitruration
Carbo
Trempe
Trempe HF
HF
Nitrocarburation

D'avance Merci a tous

Marie
 

Luki

XLDnaute Accro
Re : Créer une fenetre en VB

Bonjour Marie,

Une solution en PJ. avec une plage de mots-clés nommée.

La macro se déclenche en cas de changement dans la plage A22:A51

Code:
 Private Sub Worksheet_Change(ByVal Target As Range)

Dim LesMotsCle As Range
Dim ZoneSaisie As Range
Dim C As Range
Dim Test As Integer

Set LesMotsCle = Sheets("Mots_cle").Range("motscle")
Set ZoneSaisie = Range("A22:A51")



    If Intersect(Target, ZoneSaisie) Is Nothing Then Exit Sub

    For Each C In ZoneSaisie.Cells
        On Error Resume Next
        Test = Application.Match(C.Value, LesMotsCle, 0)
            If Err.Number = 0 Then
                MsgBox "Premier mot clé trouvé :" & C.Value & vbLf & "Attention Vérifier si l'opération de dégazage est necessaire", vbExclamation
                Exit Sub
            End If
    Next C
End Sub
A bientôt
 

Pièces jointes

  • dégazage.xls
    26 KB · Affichages: 95
Dernière édition:

MARIE74

XLDnaute Occasionnel
Re : Créer une fenetre en VB

Bonjour Marie,

Une solution en PJ. avec une plage de mots-clés nommée.

La macro se déclenche en cas de changement dans la plage A22:A51

Code:
 Private Sub Worksheet_Change(ByVal Target As Range)

Dim LesMotsCle As Range
Dim ZoneSaisie As Range
Dim C As Range
Dim Test As Integer

Set LesMotsCle = Sheets("Mots_cle").Range("motscle")
Set ZoneSaisie = Range("A22:A51")



    If Intersect(Target, ZoneSaisie) Is Nothing Then Exit Sub

    For Each C In ZoneSaisie.Cells
        On Error Resume Next
        Test = Application.Match(C.Value, LesMotsCle, 0)
            If Err.Number = 0 Then
                MsgBox "Premier mot clé trouvé :" & C.Value & vbLf & "Attention Vérifier si l'opération de dégazage est necessaire", vbExclamation
                Exit Sub
            End If
    Next C
End Sub
A bientôt

Bonjour et merci Beaucoup luki

Mais petit probleme ta macro fonctionne a l'envers
La macro se déclenche en cas de changement dans la plage A22:A51

Ce que je souhaite c'est que la macro se déclenche lorsque un des mots de la LISTE est saisi
dans la plage A22:A51

Mais j'ai quand meme gardé cette macro pour une autre application

Désolé de te donner du travail supplementaire

D'avance merci (la météo toujours aussi deg...........asse
 

Luki

XLDnaute Accro
Re : Créer une fenetre en VB

Re Marie,

Elle se déclenche en cas de changement si un des mots clé est présent dans la plage A21:A55 :
  1. Au moment de sa saisie
  2. au moment d'une saisie quelconque si un des mots se trouve déjà dans la liste.
Donc je ne pense pas qu'elle fonctionne à l'envers.

On peux limiter son action à la saisie de la cellule sélectionnée. Mais ce n'est pas ce que j'avais compris:

si un mot de la liste suivante est renseigné dans une ou plusieurs cellule de A22 a A51
Essaie de préciser

A+

ps: soleil à paris!
 
Dernière édition:

MARIE74

XLDnaute Occasionnel
Re : Créer une fenetre en VB

Re Marie,

Elle se déclenche en cas de changement si un des mots clé est présent dans la plage A21:A55 :
  1. Au moment de sa saisie
  2. au moment d'une saisie quelconque si un des mots se trouve déjà dans la liste.
Donc je ne pense pas qu'elle fonctionne à l'envers.

On peux limiter son action à la saisie de la cellule sélectionnée. Mais ce n'est pas ce que j'avais compris:

Essaie de préciser

A+

OK luki

je ne l'avais pas compris comme ça tu as raison toutes mes excuses

Alors pour mon application pourrais tu limiter son action à la saisie de la cellule sélectionnée


Sorry d'avance merci
 

Pierrot93

XLDnaute Barbatruc
Re : Créer une fenetre en VB

Bonjour Marie, Re Luki

pas sur d'avoir bien compris la demande, mais ci dessous une autre approche :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim maliste(), x As Range, i As Byte
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A25:A51")) Is Nothing Then
maliste = Array("T.TH", "T.Thermique", "Thermique", "Traitement", "HV", "HB", "HRC", _
    "Zingage", "Zn", "Znbi", "Surface", "T.Surface", "10,9", "12,9", "Classe", _
    "Carbonitruration", "Carbo", "Trempe", "Trempe HF", "HF", "Nitrocarburation")
For i = LBound(maliste) To UBound(maliste)
    Set x = Range("A22:A51").Find(maliste(i), , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then Exit For
Next i
If Not x Is Nothing Then
    MsgBox "mot trouvé : " & x.Value & vbLf & "que faisons nous ensuite ?"
Else
    MsgBox "mot non trouvé, que-fait on ?"
End If
End If
End Sub

bon après midi
@+
 

Luki

XLDnaute Accro
Re : Créer une fenetre en VB

Re Marie, bonjour Pierrot,

La même modifiée. Tu peux saisir une ou plusieurs cellules simultanément. Ca n'agit que sur la zone saisie.

Code:
 Private Sub Worksheet_Change(ByVal Target As Range)

Dim LesMotsCle As Range
Dim ZoneSaisie As Range
Dim C As Range
Dim Test As Integer

Set LesMotsCle = Sheets("Mots_cle").Range("motscle")
Set ZoneSaisie = Range("A22:A51")

    If Intersect(Target, ZoneSaisie) Is Nothing Then Exit Sub

    For Each C In Target.Cells
        On Error Resume Next
        Test = Application.Match(C.Value, LesMotsCle, 0)
            If Err.Number = 0 Then
                MsgBox "Premier mot clé trouvé :" & C.Value & vbLf & "Attention Vérifier si l'opération de dégazage est necessaire", vbExclamation
                Exit Sub
            End If
    Next C
End Sub
Voili, voilà...

Pierrot, pour ma part, je préfère en général stocker les listes de valeurs (comme celle-ci pour les mots clés) dans une feuille xl, quitte à la rendre veryHidden. Je trouve que c'est plus facile pour la maintenance. Je pars du principe que moins je touche à un code qui tourne, moins j'y ajoute des erreurs!
En passant par une définition de plage un peu souple et dynamique et le tour est joué. Mais bon, ce n'est que ma manière de faire....:)

Bonne jounée
 

Statistiques des forums

Discussions
312 489
Messages
2 088 848
Membres
103 974
dernier inscrit
chmikha