Macros successives sur Excel en gardant le résultat des macros précédentes

Bonjour,

Sur une même cellule contenant différentes valeurs (exemple les chiffres 1 2 3 4 5 6 7 8 9) je voudrais créer une première macro (Macro1) qui supprimerait le chiffre 1 pour aboutir à la suite inscrite dans la cellule qui serait 2 3 4 5 6 7 8 9. C'est facile par enregistrer une nouvelle macro. Je voudrais ensuite créer une seconde macro (Macro2) qui s'appliquerait à la même cellule qui supprimerait le chiffre 2. Je peux facilement créer cette macro2 et je voudrais que cette macro2 s’applique sur le résultat de la Macro1 c'est à dire sur la suite 2 3 4 5 6 7 8 9 pour donner après exécution successive des 2 macros la suite 3 4 5 6 7 8 9. On peut envisager la création de la Macro3 (pour enlever le 3) qui appliquée sur le résultat de la Macro2 donnerait la suite 4 5 6 7 8 9. Etc

En créant actuellement la Macro1 j'élimine bien le chiffre 1 mais si j'applique la macro2 je supprime le chiffre 2 mais le chiffre 1 revient. La Macro 2 s'est donc exécutée sans tenir compte de la Macro1. Je ne sais pas résoudre ce problème.

En d'autres termes je voudrais que la Macro2 s'applique sur le résultat de la Macro1, la Macro 3 sur le résultat de Macro2 et non chaque fois sur la valeur initiale qui est la suite 1 2 3 4 5 6 7 8 9 donnant un résultat limité à la seule exécution de la dernière Macro.

Merci.

bonjour,

soit ta macro n'écrit pas le résultat de la suppression dans la cellule concernée, soit tu as une instruction qui remet le contenu initial de la cellule après exécution de la macro.

peux-tu mettre ton fichier avec tes macros ?

Bonjour,

Merci pour les réponses. J'ai créé un fichier simplifié avec les 2 Macros 1 et 2 qui s'appliquent aux 3 colonnes du haut.

16tests-macros.xlsm (17.10 Ko)

re,

voici un exemple de macros à adapter à ce que tu veux faire.

21tests-macros.xlsm (20.10 Ko)

Cross post...

Merci,

Cependant, dans ton exemple, ce n'est pas vraiment ce que je veux faire.

Avec la Macro1 activée seule je supprime le 1 de la suite 1 2 3 4 5 6 7 8 9. J'aurais alors dans ma cellule la suite 2 3 4 5 6 7 8 9.

Je créé la Macro 2 qui activée seule permet de supprimer le 2 de la suite 1 2 3 4 5 6 7 8 9 pour avoir dans ma cellule la suite 1 3 4 5 6 7 8 9.

Ma question spécifique est de savoir comment faire pour qu'une fois la Macro1 activée et la suite 2 3 4 5 6 7 8 9 obtenue je puisse activer la Macro2 pour supprimer le 2 de cette nouvelle suite sans rajouter le 1.

Quand j'aurais réglé ce problème j'utiliserais le même script pour créer autant de macros nécessaires pour éliminer autant de chiffres que je voudrais en activant successivement les bonnes macros qui s'appliqueraient aux cellules que j'aurais choisies.

Ai-je été assez clair?

Merci.

bonsoir,

dans le fichier que je t'ai mis, la macro1 contient 2 instructions d'effacement, la première pour le chiffre 1, la seconde pour le chiffre 3. Si tu veux avoir l'effacement des chiffres dans des macros séparées, il te suffit de mettre chacune de ces instructions dans des macros différentes. Si tu veux effacer le 2 et non le 3, tu remplaces le 3 par un 2. Je suis désolé de ne pas avoir respecté strictement tes instructions.

Ai-je été assez clair?

oui, mon général ! je ne ferai plus...

bonjour poute et H2S04,

peut-être il faut couper le macro1 en 2 parties

Sub Macro1()
     supprimerchiffre Range("B3:D3"), 1
End Sub

Sub Macro3()
     supprimerchiffre Range("B3:D3"), 3
End Sub

Sub supprimerchiffre(plage As Range, chiffre)
     'suppression du chiffre dans la plage
     For Each cellule In plage
          cellule.Value = Trim(Replace(Replace(cellule.Value, chiffre, ""), "  ", " "))     ' suppression des espaces inutiles
     Next
End Sub

Bonjour et joyeux Noël H2S04 et Bart,

Merci pour vos conseils. En utilisant la solution préconisée par H2SO4 je réussis à faire exactement ce que je souhaite.

J'aurais une autre question maintenant.

Comment activer automatiquement une de ces Macros en entrant une valeur dans une des cellules qui est juste sous celle où sont les séries (1 2 3 etc).

Par exemple je voudrais en entrant le chiffre 1 dans la cellule A4 pouvoir activer automatiquement la Macro qui supprime le 1 dans les suites de chiffres qui se trouvent ici dans les cellules B3, C3 et D3.

Merci encore et bien cordialement.

Poute

re,

avec un "change-event" dans le module de la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
     With Target
          If .Address = "$B$20" And Len(.Value) > 0 Then supprimerchiffre Range("B3:D3"), .Value
     End With
End Sub
21tests-macros.xlsm (26.11 Ko)

Merci Bart,

C'est super mais peux-tu m'expliquer comment faire? Où trouver le module de la feuille et comment adapter le "change -event" à d'autres cellules?

Merci et bien cordialement

Poute

vous pouvez commencer à lire ceci

https://www.excel-pratique.com/fr/vba/selections

et puis

https://www.excel-pratique.com/fr/vba/evenements_classeur

clicquez avec droite sur le tab de "Cavenas"

Merci beaucoup Bart.

Excellente solution

Poute

Une dernière question pour BsAlv/Bart:

Peut-on désactiver et réactiver à loisir les commandes entrées dans la fenêtre Visualiser le code comme tu m'as appris à le faire sur mon fichier contenant une suite de chiffres.

Merci

je penses que je n'ai pas bien compris la question. Voulez-vous supprimer temporairement une ligne d'une macro, c'est ça ?

Alors vous pouvez ajouter un guillemet simple ' ou REM (de remark) en face de cette ligne, comme ça :

'msgbox "blablabla"

Non

Je voudrais a ma convenance pouvoir travailler sur le fichier dans lequel les macros sont actives (suppression d un chiffre lors de la saisie d une valeur) mais aussi pouvoir inactiver l ensemble des macros et entrer des valeurs sans que les macros s activent comme dans un fichier classique.

J ai essayé en passant par -options -Gestion de la confidentialité -Paramètres des macros mais aucune des 4 options proposées (inactiver les macros avec ou sans notification etc ) ne permet aux macros de ne pas être actives.

Merci

Poute

bonjour,

alors, vous pouvez utiliser un des 2 macros ici dessous pour activer/désactiver

Sub EON()
     Application.EnableEvents = True     '=Activer
End Sub

Sub EOff()
     Application.EnableEvents = False     '=Desactiver
End Sub

Merci, Ca marche très bien.

Félicitations pour ces conseils très judicieux.

poute

Si Bart est toujours disponible j'aurais 2 questions supplémentaires concernant mon classeur excel avec les suites de 1 à 10.

J'utilise une série de commandes comme celle ci-dessous créées dans visualiser le code

If .Address = "$C$4" And Len(.Value) > 0 Then supprimerchiffre Range("C3:M3"), .Value

OK pour Address puis And Len(.Value) > 0. J'aimerais changer la couleur de la police du texte dans une série de cellules (par exemple "C3:M3") et la couleur de remplissage.

Dans l'exemple ci-dessus après Then "supprimerchiffre" permettait d'enlever le chiffre sélectionné

De la même façon j'aimerais savoir quels termes employer (à la place de supprimerchiffre) pour changer la couleur de la police de rouge à noir? ainsi que pour remplir la cellule en bleu par exemple?

Merci

Poute

re,

voici la méthode, mais je ne comprenais pas ce que vous voulez faire.

Sub couleur()
     With Range("B3:D3")     'la plage
          .Interior.ColorIndex = 3     'remplissage rouge
          .Font.ColorIndex = 5     'police bleu
     End With
End Sub
Rechercher des sujets similaires à "macros successives gardant resultat precedentes"