Créer macro annuler action
Bonisam
Messages postés
150
Statut
Membre
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Encore moi. J'aimerais soliciter à qui peut m'aider. Est ce possible de créer un macro qui annule une action. Par exemple je fais une écriture dans ma ligne, au lieu de suprimer je fais annuler.
Merci d'avance à vous!
Mes respects
Bonisam
Encore moi. J'aimerais soliciter à qui peut m'aider. Est ce possible de créer un macro qui annule une action. Par exemple je fais une écriture dans ma ligne, au lieu de suprimer je fais annuler.
Merci d'avance à vous!
Mes respects
Bonisam
A voir également:
- Créer macro annuler action
- Comment créer un groupe whatsapp - Guide
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
21 réponses
Bonjour,
La moindre des choses serait de dire un p'tit coucou ou un merci lorsque quelqu'un t'apporte une solution. Non?
La moindre des choses serait de dire un p'tit coucou ou un merci lorsque quelqu'un t'apporte une solution. Non?
pijaku,
merci pour le rappel. je suis vraiment désolé et m'excuse sincèrement.
Je promet d'être plus poli la prochaine fois.
Merci pour tous.
Mes respects
Bonisam
merci pour le rappel. je suis vraiment désolé et m'excuse sincèrement.
Je promet d'être plus poli la prochaine fois.
Merci pour tous.
Mes respects
Bonisam
Pas de souci, pour tout te dire ça m'a surpris, tes posts étant tous empreints d'une telle politesse. Oublions!
Répondons plutôt à ta question.
Il est impossible, par la commande Excel Editions/Annuler, d'annuler la tâche accomplie par une macro. Ca tu le savais déjà.
Pour "annuler" ce qu'a réalisé un code VBA, il faut écrire le code inverse...
Exemple :
Répondons plutôt à ta question.
Il est impossible, par la commande Excel Editions/Annuler, d'annuler la tâche accomplie par une macro. Ca tu le savais déjà.
Pour "annuler" ce qu'a réalisé un code VBA, il faut écrire le code inverse...
Exemple :
Sub EcrisTestEnA1()
Range("A1") = "Test"
End Sub
Sub AnnuleCeQueJaiEcrisEnA1()
If Range("A1") = "Test" Then
Range("A1") = ""
End If
End Sub
pour cette procedure ça devient en fait faire un double travail.
Mais vraiment vous m'avez eclairer et je comprend mieux. donc en fin je vais préférer laisser tombé ça pour garder la commande standard d'annulation.
Encore merci pour la prompte réaction surtout votre sens de compréhension.
Mes respects
Bonisam
Mais vraiment vous m'avez eclairer et je comprend mieux. donc en fin je vais préférer laisser tombé ça pour garder la commande standard d'annulation.
Encore merci pour la prompte réaction surtout votre sens de compréhension.
Mes respects
Bonisam
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ok, merci c'est super.
Je pense que c'est bon pour ça.
Par contre j'ai un autre problème.
J'aimerais réaliser une macro de vérification d'erreur.
En fait j'ai crée 12 feuilles de saisie répresentant les mois de janvier à decembre. donc j'aimerais avoir une macro qui empêche la validation de la date en affichant un message d'erreur de type "date incorrecte" si un utilisateur saisie par exemple 01/02/2011 dans la feuille de janvier. Mais si l'année est antérieur à 2011, ça doit passer.
Merci pour votre aide
Mes respects
Bonisam
Je pense que c'est bon pour ça.
Par contre j'ai un autre problème.
J'aimerais réaliser une macro de vérification d'erreur.
En fait j'ai crée 12 feuilles de saisie répresentant les mois de janvier à decembre. donc j'aimerais avoir une macro qui empêche la validation de la date en affichant un message d'erreur de type "date incorrecte" si un utilisateur saisie par exemple 01/02/2011 dans la feuille de janvier. Mais si l'année est antérieur à 2011, ça doit passer.
Merci pour votre aide
Mes respects
Bonisam
Dans une colonne bien précise "colonne A"
Mes respects
Bonisam
Mes respects
Bonisam
Code à coller dans chaque code de feuille :
Clic droit sur chaque onglet/Visualiser le code
copier / coller ceci :
Testes et dis nous...
Clic droit sur chaque onglet/Visualiser le code
copier / coller ceci :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) And Year(Target.Value) = Year(Date) Then
MsgBox "Date non valide"
With Target
.ClearContents
.Select
End With
End If
End Sub
Testes et dis nous...
Bonjour,
D'abord je m'excuse, c'était l'heure de la pause ce nous.
Sinon la procédure marche mais unique pour l'anné 2011. Dans mon cas l'année peut varier et je voulais qu'en fonction de l'année choisie le code tient compte de ça. touvez-ci joint un cas pratique de ce que je veux faire:
https://www.cjoint.com/?AHjsgoTvJkr
Merci pour tout
Mes respects
Bonisam
D'abord je m'excuse, c'était l'heure de la pause ce nous.
Sinon la procédure marche mais unique pour l'anné 2011. Dans mon cas l'année peut varier et je voulais qu'en fonction de l'année choisie le code tient compte de ça. touvez-ci joint un cas pratique de ce que je veux faire:
https://www.cjoint.com/?AHjsgoTvJkr
Merci pour tout
Mes respects
Bonisam
Bonjour,
Je ne disposes pas d'Excel 2007 et donc ne peux pas ouvrir ton fichier joint. Pour me le passer, merci de l'enregistrer sous format 97-2003.
Tu avais pourtant dit : Mais si l'année est antérieur à 2011, ça doit passer Ben dans mon code ça passe...
Si tu veux empêcher systématiquement toute saisie de date dont le mois serait différent du nom de l'onglet :
Je ne disposes pas d'Excel 2007 et donc ne peux pas ouvrir ton fichier joint. Pour me le passer, merci de l'enregistrer sous format 97-2003.
Tu avais pourtant dit : Mais si l'année est antérieur à 2011, ça doit passer Ben dans mon code ça passe...
Si tu veux empêcher systématiquement toute saisie de date dont le mois serait différent du nom de l'onglet :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Then
MsgBox "Date non valide"
With Target
.ClearContents
.Select
End With
End If
End Sub
Bonjour pijaku
Tu avais pourtant dit : Mais si l'année est antérieur à 2011, ça doit passer Ben dans mon code ça passe. En fait je m'excuse c'est une erreur de langage. J'aimerais en fin que tout mois différent du mois de l'année choisie qu'il soit antérieur ou postérieur soit systématiquement réjété.
Touvez-ci joint une version 97-2003: https://www.cjoint.com/?AHkku0FSgGW
Merci pour votre aide.
Mes respects
Bonisam
Tu avais pourtant dit : Mais si l'année est antérieur à 2011, ça doit passer Ben dans mon code ça passe. En fait je m'excuse c'est une erreur de langage. J'aimerais en fin que tout mois différent du mois de l'année choisie qu'il soit antérieur ou postérieur soit systématiquement réjété.
Touvez-ci joint une version 97-2003: https://www.cjoint.com/?AHkku0FSgGW
Merci pour votre aide.
Mes respects
Bonisam
oui j'ai testé. Ca mache pour l'année choisie. Par exemple pour l'année 2011 dans la feuille de janvier: si on saisie 01/02/2011 ça bloque (ça c'est bien). mais si on saisie par exemple 01/01/2010 ou 01/01/2012, ça passe.(ça c'est pas bon). j'aimerais que tout mois différent du mois de l'année choisie soit systématiquement bloqué.
Merci pour tout
Mes respects
Bonisam
Merci pour tout
Mes respects
Bonisam
Alors code à copier dans chacune de tes feuilles:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Or Year(Date) <> Year(CDate(Target.Value)) Then
MsgBox "Date non valide"
With Target
.ClearContents
.Select
End With
End If
End Sub
waoooo! c'est génial. ça marche 5/5. Vous êtes vraiment un génie de la chose.
mille merci, vous m'avez vraiment sauve et je ne sais comment vous remercier.
Néanmoins j'ai juste une question: dans mes bricolage je suis arrivé à faire un petit logociel mais un problème perdure.c'est notamment le problème de changement d'année. Est ce possible avec une macro une fois qu'on va à l'année suivante, la base soit remise à zero bien avec une possibilité de retour.
Je prend un exemple: nous somme en 2011 et une fois qu'on passe à 2012, la base soit remise à vide.
Merci pour tout votre sacrifice
Mes respects
Bonisam
mille merci, vous m'avez vraiment sauve et je ne sais comment vous remercier.
Néanmoins j'ai juste une question: dans mes bricolage je suis arrivé à faire un petit logociel mais un problème perdure.c'est notamment le problème de changement d'année. Est ce possible avec une macro une fois qu'on va à l'année suivante, la base soit remise à zero bien avec une possibilité de retour.
Je prend un exemple: nous somme en 2011 et une fois qu'on passe à 2012, la base soit remise à vide.
Merci pour tout votre sacrifice
Mes respects
Bonisam
Ce code boucle sur toutes les feuilles de ton classeur.
Si la feuille ne s'appelle ni "acceuil", ni "Recapitulatif", elle boucle sur toutes les cellules de A10 à H dernière ligne
Si la cellule ne contient pas de formule, son contenu est effacé.
Tu dis...
Si la feuille ne s'appelle ni "acceuil", ni "Recapitulatif", elle boucle sur toutes les cellules de A10 à H dernière ligne
Si la cellule ne contient pas de formule, son contenu est effacé.
Tu dis...
Sub EffaceDonnees()
Dim DerLig As Long
Dim Wsh As Worksheet
Dim Plage As Range, Cel As Range
For Each Wsh In ThisWorkbook.Worksheets
If Wsh.Name <> "Acceuil" And Wsh.Name <> "Recapitulatif" Then
With Wsh
DerLig = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
Set Plage = .Range("A10:H" & DerLig)
For Each Cel In Plage
If Left(Cel.Formula, 1) <> "=" Then
Cel.ClearContents
End If
Next
End With
End If
Next
Set Plage = Nothing
End Sub
Bonjour à vous deux,
Tout d'abord toutes mes excuses de m'immiscer dans votre échange mais je le suis depuis le début car cela m'interesse.
J'ai testé la solution de de Pijaku et elle me conviendrait parfaitement mais à condition que ce contrôle puisse se faire sur douze mois mais à cheval sur deux années, d'Avril à Mars par exemple.
Cordialement
Mistral
Tout d'abord toutes mes excuses de m'immiscer dans votre échange mais je le suis depuis le début car cela m'interesse.
J'ai testé la solution de de Pijaku et elle me conviendrait parfaitement mais à condition que ce contrôle puisse se faire sur douze mois mais à cheval sur deux années, d'Avril à Mars par exemple.
Cordialement
Mistral
Celle ci-dessous
Qui permet de tester la cohérence de la date saisie sur la bonne feuille et que le millesime de l'année est correcte.
Cordialement
Mistral
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Or Year(Date) <> Year(CDate(Target.Value)) Then
MsgBox "Date non valide"
With Target
.ClearContents
.Select
End With
End If
End Sub
Qui permet de tester la cohérence de la date saisie sur la bonne feuille et que le millesime de l'année est correcte.
Cordialement
Mistral
Le problème se pose, pour toi, pour les feuilles janvier, février et mars qui sont donc en année N+1. Si tu les utilises avant 2012 par exemple, le test : Year(Date) <> Year(CDate(Target.Value)) ne renverra pas d'erreur de saisie.
Il faut donc biaiser. Si tu as, par exemple en D12 l'année écrite ex : 2012 en N+1 2011 en N tu peux utiliser ce code (à adapter Range("D12")) :
Il faut donc biaiser. Si tu as, par exemple en D12 l'année écrite ex : 2012 en N+1 2011 en N tu peux utiliser ce code (à adapter Range("D12")) :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Or Range("D12") <> Year(CDate(Target.Value)) Then
MsgBox "Date non valide"
With Target
.ClearContents
.Select
End With
End If
End Sub
Bonjour;
Je voulais juste une précision: où mettre le code? dans chaque feuille où dans la feuille accueil?
En plus est ce que si une cellule contient une formule, on peut effacé le résultat et conserver la formule?
Sinon j'ai testé votre dernière reponse mais à moins que j'ai fait une erreur, ça marche pas.
Merci pour tout
Mes respects
Bonisam
Je voulais juste une précision: où mettre le code? dans chaque feuille où dans la feuille accueil?
En plus est ce que si une cellule contient une formule, on peut effacé le résultat et conserver la formule?
Sinon j'ai testé votre dernière reponse mais à moins que j'ai fait une erreur, ça marche pas.
Merci pour tout
Mes respects
Bonisam
Sub EffaceDonnees() se place dans un module standard (sous visual basic : Insertion/Module).
si une cellule contient une formule, on peut effacé le résultat et conserver la formule? Alors, logiquement une cellule qui contient une formule (à part certaines comme =AUJOURDHUI()) fait référence à une (au moins) autre cellule qui elle contient une valeur. Si vous supprimez le contenu de toutes les cellules qui contiennent une valeur, les cellules contenant des formules vont :
- perdre leur valeur,
- conserver leurs formules.
Sinon j'ai testé votre dernière reponse mais à moins que j'ai fait une erreur, ça marche pas Moi aussi, j'ai testé, et ça fonctionne... Peut être une erreur de votre part. de toutes façons, le code ne peux fonctionner que depuis un mdule standard...
A vous...
si une cellule contient une formule, on peut effacé le résultat et conserver la formule? Alors, logiquement une cellule qui contient une formule (à part certaines comme =AUJOURDHUI()) fait référence à une (au moins) autre cellule qui elle contient une valeur. Si vous supprimez le contenu de toutes les cellules qui contiennent une valeur, les cellules contenant des formules vont :
- perdre leur valeur,
- conserver leurs formules.
Sinon j'ai testé votre dernière reponse mais à moins que j'ai fait une erreur, ça marche pas Moi aussi, j'ai testé, et ça fonctionne... Peut être une erreur de votre part. de toutes façons, le code ne peux fonctionner que depuis un mdule standard...
A vous...
Bonjour,
je vais faire une requette spéciale à vous de m'envoyé un modèle je vais voir sinon je me bat dans tous les sens en vain.
Donc si vous pouvez m'envoyer un modèle cela va beaucoup m'aider.
Merci pour tout
Mes respects
Bonisam
je vais faire une requette spéciale à vous de m'envoyé un modèle je vais voir sinon je me bat dans tous les sens en vain.
Donc si vous pouvez m'envoyer un modèle cela va beaucoup m'aider.
Merci pour tout
Mes respects
Bonisam
Là j'ai pas compris : je vais faire une requette spéciale ???????????
Sinon votre fichier est ici...
Sinon votre fichier est ici...
Pijaku je viens de prendre connaissance de ton dernier message et j'ai fait des essais en aynat modifié la ligne :
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Or Year(Date + 365) <> Year(CDate(Target.Value)) Then
Dans la Woorksheet des trois premiers mois et ça fonctionne, reste à regler le problème des années bisextilles dont 2012 fait partie.
Cordialement
Mistral
If UCase(Format(CDate(Target.Value), "mmmm")) <> UCase(ActiveSheet.Name) Or Year(Date + 365) <> Year(CDate(Target.Value)) Then
Dans la Woorksheet des trois premiers mois et ça fonctionne, reste à regler le problème des années bisextilles dont 2012 fait partie.
Cordialement
Mistral
Bonjour,
Je voulais dire vous demander spécialement de m'envoyé un modèle.
Dites moi, il faut excuter ou bien automatiquement ça marche?
Parce que j'ai crée un module standard mais même quand je change d'année les donnée restent.
je vous renvoie mon fichier:en fait dans la feuille "Acceuil" il y'a une liste déroulante des années. donc je voudrait quand passant à l'année suivante(2012) les donné de l'année antérieur (2011) s'efface. et quand je reviens dans l'antérieur (2011) après je puisse quand même revoir mes donées et vis versa. Ci-joint mon fichier :http://cjoint.com/?AHkoXivjrmm
Je suis désolé de trop vous embêter pour ça mais comprenez moi.
Merci pour tout
Mes respects
Bonisam
Je voulais dire vous demander spécialement de m'envoyé un modèle.
Dites moi, il faut excuter ou bien automatiquement ça marche?
Parce que j'ai crée un module standard mais même quand je change d'année les donnée restent.
je vous renvoie mon fichier:en fait dans la feuille "Acceuil" il y'a une liste déroulante des années. donc je voudrait quand passant à l'année suivante(2012) les donné de l'année antérieur (2011) s'efface. et quand je reviens dans l'antérieur (2011) après je puisse quand même revoir mes donées et vis versa. Ci-joint mon fichier :http://cjoint.com/?AHkoXivjrmm
Je suis désolé de trop vous embêter pour ça mais comprenez moi.
Merci pour tout
Mes respects
Bonisam
donc je voudrait quand passant à l'année suivante(2012) les donné de l'année antérieur (2011) s'efface. et quand je reviens dans l'antérieur (2011) après je puisse quand même revoir mes donées et vis versa Je vous réponds de suite, sans regarder votre tableau : impossible sans avoir une base de données stockant toutes les informations.....
Vous devriez : enregistrer votre classeur, chaque année, sous NomDuClasseur + année, et réinitialiser votre classeur manuellement en lançant la macro ci dessus référencée par ALT+F8...
Vous devriez : enregistrer votre classeur, chaque année, sous NomDuClasseur + année, et réinitialiser votre classeur manuellement en lançant la macro ci dessus référencée par ALT+F8...
Pijaku :
C'est exactement ce que j'ai fait et tu as raison faire +1 au lieu de +365 est plus intelligent. Merci à toi.
Bonisam:
J'ai testé les macros fournies par pikasu et ça fonctionne parfaitement chez moi.
La permière celle qui contrôle la validité de la date doit être sur une Woorkshett de chaque feuille Mois.
La seconde pour éffacer se trouve dans un module indépendant et tu dois la lancer manuellement ou à l'aide d'un bouton auquel tu attaches la macro.
Cordialement
Mistral
C'est exactement ce que j'ai fait et tu as raison faire +1 au lieu de +365 est plus intelligent. Merci à toi.
Bonisam:
J'ai testé les macros fournies par pikasu et ça fonctionne parfaitement chez moi.
La permière celle qui contrôle la validité de la date doit être sur une Woorkshett de chaque feuille Mois.
La seconde pour éffacer se trouve dans un module indépendant et tu dois la lancer manuellement ou à l'aide d'un bouton auquel tu attaches la macro.
Cordialement
Mistral
Bonjour,
Vraiment je m'excuse mais j'ai toujours des difficultés. J'ai crée un bouton d'execution de la macro effacedonnées. Mon problème est quand je lance l'execution de la macro elle m'affiche un message "d'erreur d'execution "1004" (Impossible de modifier une cellule fusionnée). Pourtant mes cellules fusionnées sont"A8:B8 " qui ne sont pas incluse dans ma plage. Et puis quand je part voir dans mes feuilles "mois" les données sont effacer mais ça efface aussi la cellule "A9" et "B9" pourtant ma plage est : "A10:G". Donc je ne comprend vraiment pas.
Voici mon fichier:http://cjoint.com/?AHks3pQfBQa
Je vous prie de m'aider encore.
Merci pour tout
Mes respects
Bonisam
Vraiment je m'excuse mais j'ai toujours des difficultés. J'ai crée un bouton d'execution de la macro effacedonnées. Mon problème est quand je lance l'execution de la macro elle m'affiche un message "d'erreur d'execution "1004" (Impossible de modifier une cellule fusionnée). Pourtant mes cellules fusionnées sont"A8:B8 " qui ne sont pas incluse dans ma plage. Et puis quand je part voir dans mes feuilles "mois" les données sont effacer mais ça efface aussi la cellule "A9" et "B9" pourtant ma plage est : "A10:G". Donc je ne comprend vraiment pas.
Voici mon fichier:http://cjoint.com/?AHks3pQfBQa
Je vous prie de m'aider encore.
Merci pour tout
Mes respects
Bonisam
Bonjour à vous deux,
Et de plus il y a deux fichiers différents!!!
Un sans aucune macro...
L'autre verrouillé...
Cordialement
Mistral
Et de plus il y a deux fichiers différents!!!
Un sans aucune macro...
L'autre verrouillé...
Cordialement
Mistral
Bonjour Mistral 13200,
A l'execution de la macroefface donné j'ai une erreur 1004 donc je ne comprend plus rien.
Voyez plustot à l'image suivantes:https://www.cjoint.com/?AHmksVeQtLW
Merci pour tout
Mes respects
Bonisam
A l'execution de la macroefface donné j'ai une erreur 1004 donc je ne comprend plus rien.
Voyez plustot à l'image suivantes:https://www.cjoint.com/?AHmksVeQtLW
Merci pour tout
Mes respects
Bonisam