Message Box automatique

Herbiti

XLDnaute Nouveau
Bonjour Le Forum,

J'aimerai faire une boîte de dialogue qui apparaît que lorsque l'on a rempli certaines cellules neccessaires à l'exécution.

J'y suis arrivé mais j'utilise une cellule pour faire:

j'ai mis:
Code:
si(nbval(A1;A2;A3)=3;réponse();'')
, dans la cellule A4
qui veut dire que si les cellules A1 et A2, neccessaires au programme ainsi que la réponse (A3) est remplie, le message apparaît

La fonction Réponse est défini comme telle:

Code:
Function Réponse()
MsgBox 'Votre réponse, avec les éléments donnés, est la suivante: ' & Sheets('Feuille').Range('A3')
End Function

J'aimerai faire cela sans utilisé une cellule de la feuille.

Merci

Message édité par: Herbiti, à: 15/09/2005 10:40

Message édité par: Herbiti, à: 15/09/2005 10:41

Message édité par: Herbiti, à: 15/09/2005 10:41
 

Abel

XLDnaute Accro
Bonjour Herbiti,

Essaie :

Sub Reponse()
dim c as range
dim i as integer

i=0
for each c in range('a1:a3')
if c.value<>'' then i=i+1
next c
if i=3 then MsgBox 'Votre réponse, avec les éléments donnés, est la suivante: ' & Sheets('Feuille').Range('A3')

end sub

J'espère avoir saisi la question.

Abel.
 

ZZR09

XLDnaute Occasionnel
Bjr Herbiti, Abel, Le forum

Je pense qu'en utilisant le code d'Abel avec un événement Worksheet_change serait pas mal :

Dans VB, feuil1 :
worksheet -> événement change

et le code d'Abel ou celui-ci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets(1).Range('A1') = '' Or Sheets(1).Range('A2') = '' Or Sheets(1).Range('A3') = '' Then
    Exit Sub
Else
    MsgBox 'Votre réponse, avec les éléments donnés, est la suivante: ' & Sheets('Feuille').Range('A3'), vbOKOnly
End If

End Sub

la macro se lancera à chaque changement ds la feuille en question

A+
:
 

Abel

XLDnaute Accro
Re,

Oui, oui. Pardon.

2 solutions :
Dans un module avec un bouton associé sur la feuille ou, comme l'indique ZZR09, sur l'évennement 'quand changement'.

Une petite amélioration, si tu me le permets ZZR09 :

Private Sub Worksheet_Change(ByVal Target As Range)
dim Cible as range
set Cible= intersect (target, range('a1:a3'))
if not Cible is nothing then
If Sheets(1).Range('A1') = '' Or Sheets(1).Range('A2') = '' Or Sheets(1).Range('A3') = '' Then
Exit Sub
Else
MsgBox 'Votre réponse, avec les éléments donnés, est la suivante: ' & Sheets('Feuille').Range('A3'), vbOKOnly
End If
end if
End Sub

Le deuxième test ne se fait que s'il y a un changement dans la plage 'A1:A3'. Petit gain de temps (sans doute invisible vu la brièveté du code).

Abel.
 

Herbiti

XLDnaute Nouveau
ça fonctionne à merveille

mais j'aimerai quelques explications (ce que c'est qu'un range, etc...) sur le code suivant:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cible As Range

Set Cible = Intersect(Target, Range('a1:a3'))

If Not Cible Is Nothing Then
    If Sheets(1).Range('A1') = '' Or Sheets(1).Range('A2') = '' Or Sheets(1).Range('A3') = '' Then
        Exit Sub
    Else
        MsgBox 'Votre réponse, avec les éléments donnés, est la suivante: ' & Sheets(1).Range('A3'), vbOKOnly
    End If
End If

End Sub
 

Abel

XLDnaute Accro
Re,

Quand tu es dans l'éditeur de VB, clique sur le mot pour lequel tu souhaites une explication et presse la touche F1.
Cela aura pour effet d'ouvrir l'aide d'Excel (et VB) sur le mot recherché.

L'aide est assez bien détaillée. Mais c'est vrai que pour un néophyte ...

Concernant Range (zone), cela désigne une plage de cellules dans une feuille. Cela peut désigner une seule cellule comme plusieurs.


Abel.
 

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 655
Membres
105 479
dernier inscrit
chaussadas.renaud