Alerte fermeture classeur
Résolu
Chicorette
Messages postés
84
Date d'inscription
Statut
Membre
Dernière intervention
-
Chicorette Messages postés 84 Date d'inscription Statut Membre Dernière intervention -
Chicorette Messages postés 84 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Alerte fermeture classeur
- Fausse alerte mcafee - Accueil - Piratage
- Sytadin fermeture - Télécharger - Transports & Cartes
- Fausse alerte connexion facebook - Guide
- Forcer fermeture application windows - Guide
- Annuler fermeture onglet chrome - Guide
6 réponses
Au passage .. tu as testé le code que tu as donné à l'utilisateur ??
Je pense qu'il risque d'avoir un souci.. non ??
Perso... pour tester si une plage est vide j'utiliserai plutôt :
Je pense qu'il risque d'avoir un souci.. non ??
Perso... pour tester si une plage est vide j'utiliserai plutôt :
Sub test() If isRangeEmpty(Range("M1:M300")) Then Debug.Print "vide" Else Debug.Print "non vide" End If End Sub Function isRangeEmpty(Rng As Range) As Boolean If WorksheetFunction.CountA(Rng) = 0 Then isRangeEmpty = True Else isRangeEmpty = False End If End Function
Bonjour,
désolée pour l'insertion du code sans les <>, je ne le savais pas. C'est noté à présent, merci.
Pour le code, je suis encore en phase test et justement il ne s'exécute pas.
Je souhaiterais avoir une MessageBox à la fermeture du classeur, si une des cellule(s) de la feuille en question est vide.
L'utilisateur est censé le voir car j'ai mis une mise en forme conditionnelle si vide = cellule rouge.
Mais avant de quitter je veux juste une alerte le lui rappelant.
Où se situe le problème dans mon code? Je ne vois pas l'erreur ou le manque d'info?. Pour moi il est correct.
Merci
Chicorette
désolée pour l'insertion du code sans les <>, je ne le savais pas. C'est noté à présent, merci.
Pour le code, je suis encore en phase test et justement il ne s'exécute pas.
Je souhaiterais avoir une MessageBox à la fermeture du classeur, si une des cellule(s) de la feuille en question est vide.
L'utilisateur est censé le voir car j'ai mis une mise en forme conditionnelle si vide = cellule rouge.
Mais avant de quitter je veux juste une alerte le lui rappelant.
Où se situe le problème dans mon code? Je ne vois pas l'erreur ou le manque d'info?. Pour moi il est correct.
Merci
Chicorette
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Testes ça :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If isRangeEmpty(Range("A2:M300")) Then MsgBox "Attention! Cette feuille contient au moins une cellule rouge." & Chr(13) & "C'est-à-dire une cellule vide." & Chr(13) & "Veuillez saisir le chiffre zéro dans les cellules censées rester vides." & Chr(13) & "Merci." Cancel = True Else ActiveWorkbook.Save End If End Sub Function isRangeEmpty(Rng As Range) As Boolean isRangeEmpty = (WorksheetFunction.CountA(Rng) = 0) End Function
Je désespère!!
Cela fait 1h que je teste dans tous les sens et je n'y comprends plus rien.
Ta dernière proposition a marché tout de suite Nickel, j'ai bien lu la message box au ralenti et pendant quelques secondes avec délice, mais une seule fois seulement! J'ai beau tester sur d'autres classeurs rien! aucune réaction. Aucun message!
Je dois revoir certaines notions je pense aussi. (Je veux comprendre pour apprendre et pas seulement copier coller).
Je n'ai plus trop le temps là ce soir. Mais samedi nuit il faut que je trouve mon bug :-)
Je soupçonne un problème de versions (2010/2013: j'essaie sur les 2) (Il n'y aurait que moi je supprimerais 2013!!!!) ;-) mais bon...
Merci beaucoup de ton aide.
Je n'abandonne pas... si ça a marché une fois c'est que c'est pas loin!!!
Merci vraiment.
Vivement samedi!!! pffff
Cela fait 1h que je teste dans tous les sens et je n'y comprends plus rien.
Ta dernière proposition a marché tout de suite Nickel, j'ai bien lu la message box au ralenti et pendant quelques secondes avec délice, mais une seule fois seulement! J'ai beau tester sur d'autres classeurs rien! aucune réaction. Aucun message!
Je dois revoir certaines notions je pense aussi. (Je veux comprendre pour apprendre et pas seulement copier coller).
Je n'ai plus trop le temps là ce soir. Mais samedi nuit il faut que je trouve mon bug :-)
Je soupçonne un problème de versions (2010/2013: j'essaie sur les 2) (Il n'y aurait que moi je supprimerais 2013!!!!) ;-) mais bon...
Merci beaucoup de ton aide.
Je n'abandonne pas... si ça a marché une fois c'est que c'est pas loin!!!
Merci vraiment.
Vivement samedi!!! pffff
Bonjour tout le monde,
J'ai, certes, 2 feuilles mais seule la 2ème est concernée par l'évènement.
Ajoutez donc le nom de la feuille pour identifier correctement le Range concerné :
J'ai, certes, 2 feuilles mais seule la 2ème est concernée par l'évènement.
Ajoutez donc le nom de la feuille pour identifier correctement le Range concerné :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rngPlage As Range Set rngPlage = Sheets("Feuil18").Range("A2:M300") If isRangeEmpty(rngPlage) Then MsgBox "Attention! Cette feuille contient au moins une cellule rouge." & Chr(13) & "C'est-à-dire une cellule vide." & Chr(13) & "Veuillez saisir le chiffre zéro dans les cellules censées rester vides." & Chr(13) & "Merci." Cancel = True Else ActiveWorkbook.Save End If End Sub Function isRangeEmpty(Rng As Range) As Boolean isRangeEmpty = (WorksheetFunction.CountA(Rng) = 0) End Function
Ajouter le nom de la feuille : OUI
Par contre :
Je peux me tromper ... mais pour moi.. cette ligne de code ne fonctionne pas... d'où l'utilisation de la fonction isRangeEmpty ...
Par contre.. je ne t'ai pas envoyé "boulé" ...ou alors il faudra m'expliquer où ....
Par contre :
Range("A2:M300").Value <> "".. NON
Je peux me tromper ... mais pour moi.. cette ligne de code ne fonctionne pas... d'où l'utilisation de la fonction isRangeEmpty ...
je me suis fait envoyer boulé par ton collègue modérateur
Par contre.. je ne t'ai pas envoyé "boulé" ...ou alors il faudra m'expliquer où ....
Bonjour tout le monde,
oh je suis désolée....
Ce n'est pas toujours facile oui, d'expliquer en long et en large nos souhaits. Donc on peut parfois aussi mal interpréter le besoin! Vous n'avez de plus pas le fichier pour mieux visualiser le cas. Vous êtes tout excusé tout le monde. et tout aussi bons les uns que les autres.
En fait j'ai 11 classeurs que je dois consolider, or une conso ne peut se faire que si des chiffres sont présents (donc j'ai partout des zéros au départ, les utilisateurs remplieront au fur et à mesure, mais ils ne maîtrisent pas tous l'outil. Et donc pour éviter qu'ils suppriment un zéro(qui est invisible car MFC police blanche) et donc me détruire la liaison en conso, je souhaitais au cas ou, leur rappeler à la fermeture, qu'ils sont censés ne pas laisser les cellules de la plage sans aucune valeur (et qu'ils doivent mettre au moins un Zéro.
Ils ont à l'ouverture un message qui donne déjà ces consignes!
Là j'ai trouvé ma solution: la voici:
Oui le nom de la feuille devait être mentionné.
Mes données sont en colonne A et la ligne d'en-tête en ligne 2; tout le reste jusqu'à M300 est la zone à saisir dans le temps...
Mais MERCI franchement! cela m'a permis de revoir deux, trois trucs, et de comprendre le sens de WorsheetFunction.Count...
Je suis désolée pour le quack...ça me gêne!
Merci Merci Jordane45
Chicorette
oh je suis désolée....
Ce n'est pas toujours facile oui, d'expliquer en long et en large nos souhaits. Donc on peut parfois aussi mal interpréter le besoin! Vous n'avez de plus pas le fichier pour mieux visualiser le cas. Vous êtes tout excusé tout le monde. et tout aussi bons les uns que les autres.
En fait j'ai 11 classeurs que je dois consolider, or une conso ne peut se faire que si des chiffres sont présents (donc j'ai partout des zéros au départ, les utilisateurs remplieront au fur et à mesure, mais ils ne maîtrisent pas tous l'outil. Et donc pour éviter qu'ils suppriment un zéro(qui est invisible car MFC police blanche) et donc me détruire la liaison en conso, je souhaitais au cas ou, leur rappeler à la fermeture, qu'ils sont censés ne pas laisser les cellules de la plage sans aucune valeur (et qu'ils doivent mettre au moins un Zéro.
Ils ont à l'ouverture un message qui donne déjà ces consignes!
Là j'ai trouvé ma solution: la voici:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If isRangeEmpty(Sheets(2).Range("B3:M300")) Then 'Range("A2:M300")) Then MsgBox "Attention! La feuille '" & Sheets(2).Name & "' contient au moins une cellule rouge." & Chr(13) & "C'est-à-dire une cellule vide." & Chr(13) & "Veuillez saisir le chiffre zéro dans les cellules censées rester vides." & Chr(13) & "Merci." Cancel = True Else ActiveWorkbook.Save End If End Sub Function isRangeEmpty(Rng As Range) As Boolean isRangeEmpty = (WorksheetFunction.CountA(Rng) <> 3576) End Function
Oui le nom de la feuille devait être mentionné.
Mes données sont en colonne A et la ligne d'en-tête en ligne 2; tout le reste jusqu'à M300 est la zone à saisir dans le temps...
Mais MERCI franchement! cela m'a permis de revoir deux, trois trucs, et de comprendre le sens de WorsheetFunction.Count...
Je suis désolée pour le quack...ça me gêne!
Merci Merci Jordane45
Chicorette