|
|
|
Bonjour mimi,
Pour le moment je sèche... Mais si le besoin est de s'assurer qu'une saisie a bien été faite correctement, je peux proposer quelque chose qui répondra peut-être (???) à ton problème. On peut facilement interdire la fermeture d'un classeur. Donc quand quelqu'un fait une saisie, on peut, à la fermeture, déclencher une série de contrôles, et si la saisie comporte des erreurs, envoyer un message et interdire la fermeture. Voisi un code tout simple, à adapter, à mettre dans le code de ThisWorkbook : Private Sub Workbook_BeforeClose(Cancel As Boolean) If (la saisie n'est pas correcte) Then MsgBox "Vérifiez votre saisie ...blablabla... svp." Cancel = True ' cancel = True : la procédure de fermeture aborte Exit Sub End If 'Et sinon si tout baigne on continue... MsgBox "Suite... ou rien de plus..." End SubPeut-être que ça peut convenir... |
Bonjour Armojax
Merci pour ta réponse mais j'ai un souci : errreur de compilation end sub attendu ta macro que j'ai adaptée (mal !) Private Sub Workbook_BeforeClose(Cancel As Boolean) saisie = InputBox("Veuillez entrer votre saisie : exemple c4 ") If saisie <> 4 Then MsgBox "Vérifiez votre saisie ...blablabla... svp." Cancel = True ' cancel = True : la procédure de fermeture aborte Exit Sub End If 'Et sinon si tout baigne on continue... MsgBox "Suite... ou rien de plus..." End Sub qu'est ce qui cloche ? En fait, je voulait que la macro s'exécute en explicant deux ou trois trucs à l'utilisateur par des msgbox, puis rende la main à l'utilisateur pour qu'il fasse sa saisie puis qu'il relance la macro quand la saisie est terminée. J'ai essayé avec End et Stop mais ces commandes arrêtent la macro Pour mettre la boite de dialogue à droite de l'écran, on m'a parlé de userform !? cela permet-il d'ouvrir la boite à l'endroit que l'on veut ? Merci beaucoup pour ton aide Mimi |
Bonjour mimi,
...j'ai un souci : errreur de compilation end sub attendu ...peut-être que tu l'avais oublié en fin de macro, non ? En tout cas, je vois un peu mieux ce que tu veux faire, et ma solution ne peut pas convenir. Autre piste : si les "deux ou trois trucs" que tu veux expliquer à l'utilisateur concernent la saisie, regarde peut-être du côté de la validation des données : Faire : Données/Validation... Avec ça tu peux, sur une cellule donnée, contrôles la validité des données, envoyer un message si ce n'est pas correct, afficher un conseil de saisie, etc. Je n'ai pas d'autre idée.
|
Remplace : If Target = "EFFACER" Then
par : If Target.Address = "$L$15" Then ou bien : If Target.Address = Range("EFFACER").Address Then |
Merci Armojax
Grâce à tes réponses j'ai creusé et j'ai réussi à faire des macros évènementielles (je ne les mettais pas dans la feuille voulue dans l'explorateur de projet mais en faisant "nouvelle macro") Elle marche maintenant : J'ai nommé le champ EFFACER en $L$15 et l'instruction "in intersect" fait que la macro ne se déclenche que sur la cellule L15 Je n'ai même plus besoin du test "if Target= "EFFACER" Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Range("EFFACER"), Target) Is Nothing Then Exit Sub Cells(22, 1) = "" Cells(22, 12) = "" Par contre, je n'ai pas réussi à créer pour la même feuille, une deuxième macro d'évènement Worksheet_BeforeDoubleClick Du coup, j'ai créé ma 2ème macro sous : Worksheet_BeforeRightClick est-ce possible de créer pour une même feuille 2 macros d'évènement identique faire ?? Merci d'avance de ta réponse Mimi |
Une petite suggestion... Teste en A1, A2, A3... Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Select Case Target.Address Case "$A$1": MsgBox "Cas 1" Case "$A$2": MsgBox "Cas 2" Case "$A$3": MsgBox "Cas 3" End Select End Sub |
GENIALE TA SUGGESTION !
J'ai remplacé msg par Application.Run "macro 1 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Select Case Target.Address Case "$A$1": Application.Run "macro 1" Case "$A$2": Application.Run "macro 2" Case "$A$3": Application.Run "macro 3" End Select End Sub Et hop, tout ce lance d'un simple double click en A1 ou A2 ou A3 Il ne me reste plus cas résoudre l'affichage de la boite de dialogue qui est pleine page et que voudrait voir apparaitre en bas de l'écran. Existe-t-il des commandes permettant de positionner la boite de dialogue (msgbox ou inputbox) ? Merci beaucoup Armojax pour cette dernière question Mimi |
Je ne pense pas qu'on puisse positionner une Msgbox, qui s'affiche au centre de l'écran (mais on peut la déplacer).
Quant à InputBox, je ne sais pas si c'est la Méthode ou la Fonction que tu utilises. La syntaxe est différente : - Méthode InputBox : Toto = Application.InputBox(Prompt:="X", Title:="Y", Left:=50, Top:=50) Left et Top s'expriment en points, respectivement par rapport aux bords gauche et supérieur de l'écran. - Fonction InputBox : Toto = InputBox(Prompt:="X", Title:="Y", xpos:=3000, ypos:=3000) xpos et ypos s'expriment en twips, respectivement par rapport aux bords gauche et supérieur de l'écran (1 twip = 1/1440 de pouce !!!!). |
Merci Armojax pour ton astuce
suite à ta réponse, j'ai écris ma commande : saisie = InputBox("Entrez votre saisie ", " A VOUS DE SAISIR", , 5000, 8000) Et j'ai maintenant la boite tout en bas de l'écran ou je la voulait ! Je pense que j'utilise la fonction et non la méthode (je ne suis pas assez calé pour faire la différence) Mais encore un souci ! Je voudrait tester de manière simple 8 cellules (les 8 cellules qui entourent la cellule de saisie) chacune de ces 8 cellules doit être = "" ou = "valeur1" ou = "valeur2" Est-il possible d'écrire simplement ces tests en évitant d'écrire 3 "if then" X 8 = 21 "if then" ? Je ne suis pas parvenu à mettre en facteur lesOr ou les And exemple : if cellule1 Or("","valeur1","valeur2") And cellule2 = Or("","valeur1","valeur2") etc. Merci beaucoup de bien vouloir me renseigner s'il existe une possibilité Mimi |
Hello mimi,
Tu peux essayer ça. Ma cellule est en D11, adapte chez toi... Sub VérifCells()
Dim Plage As Range
Dim Cellule As Range
Set Plage = Range("D11").Offset(-1, -1).Resize(3, 3)
For Each Cellule In Plage
Select Case Cellule.Value
Case "", "valeur1", "valeur2", Range("D11").Value ' cas où on ne fait rien
Case Else: MsgBox "Valeur erronée en " & Cellule.Address
End Select
Next
End SubQuelques explications :
- Range("D11").Offset(-1, -1) : désigne la cellule une ligne et une colonne au-dessus de D11. - Resize : définit une plage de 3 lignes et 3 colonnes à partir de D11 qui est dans l'angle supérieur gauche de cette plage - Ensuite un Select Case classique. J'ai inclus dans la liste de valeurs celle de la cellule D11... ce qui n'est pas forcément judicieux. Sinon, il faut tester le cas de cette cellule... Une façon parmi beaucoup d'autres...
|
La plupart des réponses se trouvent dans l'aide de VBA. Le tout est de savoir où les chercher.
Tu disposes de : * l'aide accessible par le ? dans la barre de menu de VBA (Fichier ... Outils Compléments Fenêtre ?) * et surtout l'Explorateur d'Objets qui contient une foule de renseignements. Pour y accéder : - F2, ou bien... - une petite icône en forme de boite d'où sortent des objets, ou bien... - Affichage/Explorateur d'objets. Donc, appelle l'Explorateur d'objets. Tu vois deux petites listes déroulantes superposées. L'une contient sans doute <Toutes bibliothèques>. Dans celle d'en-dessous, tape msgbox et fais Entrée (ou clique sur les jumelles). Tu obtiens la liste de tous les endroits ou la chaîne MsgBox apparaît dans les objets de toutes les bibliothèques. C'est fou, non ? Trouve la ligne : VBA Interaction MsgBox, et fais un clic droit sur Msgbox. Et dans le menu contextuel choisis Aide. Tu vas trouver la syntaxe de MsgBox, les conditions d'utilisation, etc. Pour chaque objet qui pose problème, commence à fouiller de ce côté. Manipule l'Explorateur, qui contient encore bien d'autres informations précieuses que tu découvriras. En général on s'en tire avec : - l'enregistreur de macro, pour vérifier des détails, - l'aide de VBA, - l'Explorateur d'objets, - le déroulement au pas à pas... ... et ce Forum, où on apprend des foules de choses, rien qu'en suivant les questions et réponses sur les sujets divers. Et en conclusion, si tu trouves dans la doc qu'on peut placer où on veut une MsgBox, tu me fais signe...
|
Re,
Thank you for the piece of cake !!!!!!! You're welcome ;) D'ailleurs, perso, selon le besoin, je me fais un p'tit form. Je fais pareil. Bonne soirée. lami20j |
| 12/06 14h18 | [VBA Excel] boite de recherche fichier | Programmation | 16/08 19h06 | 5 |
| 06/03 17h17 | Visual Basic Excel - Boîte de dialogue | Programmation | 07/03 21h47 | 1 |
| 23/02 16h01 | Vb excel boite de dialogue | Programmation | 23/02 22h59 | 1 |
| 21/03 16h28 | [Macro Excel] boite de dialogue | Programmation | 18/01 23h10 | 4 |