Fonction Toggle
Résolu
touroul
Messages postés
509
Date d'inscription
Statut
Membre
Dernière intervention
-
touroul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
touroul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
Bonjour le forum !
Je bute sur un truc qui devrait être simple, mais pas moyen de trouver.
Je me suis fait une fonction "Toggle", macro qui me fait passer d'un mode à un autre dans une colonne.
Il existe 2 modes : Arrivée et Départ.
Mais après deux Toggle, ce qui me fait revenir dans le mode initial, je ne parviens pas à revenir sur mes valeurs, alors que je les ai stockées dans une variable "Stock".
Bien sûr, je veux maintenir l'utilisation d'une variable, sans stocker dans une colonne intermédiaire.
Un exemple ici :
Par avance merci pour votre aide !
Je bute sur un truc qui devrait être simple, mais pas moyen de trouver.
Je me suis fait une fonction "Toggle", macro qui me fait passer d'un mode à un autre dans une colonne.
Il existe 2 modes : Arrivée et Départ.
Mais après deux Toggle, ce qui me fait revenir dans le mode initial, je ne parviens pas à revenir sur mes valeurs, alors que je les ai stockées dans une variable "Stock".
Bien sûr, je veux maintenir l'utilisation d'une variable, sans stocker dans une colonne intermédiaire.
Un exemple ici :
https://www.cjoint.com/c/LAtsPdsvajy
Par avance merci pour votre aide !
Configuration: Windows / Firefox 84.0
A voir également:
- Fonction Toggle
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
9 réponses
Bonsoir touroul
1) tu dois déclarer ta variable stock comme public hors de ta sub
2) tu as inversé Départ et Arrivée dans le If... Else
3) Le 2nd If est inutile puisque si ce n'est pas Départ c'est Arrivée
Essaye ainsi, cela fonctionne :
Cdlmnt
Via
1) tu dois déclarer ta variable stock comme public hors de ta sub
2) tu as inversé Départ et Arrivée dans le If... Else
3) Le 2nd If est inutile puisque si ce n'est pas Départ c'est Arrivée
Essaye ainsi, cela fonctionne :
Public stock Sub Toggle() If Range("B2").Value = "Départ" Then Range("B2").Value = "Arrivée" stock = Range("B3:B6") Range("B3:B6").ClearContents Else Range("B2").Value = "Départ" Range("B3:B6").Value = stock End If End Sub
Cdlmnt
Via
Bonjour
Non je ne connais pas cette commande
Mais pour qu'une variable reste enregistrée c'est bien le fait de la déclarer Public qui le permet (tant que le fichier est ouvert bien sûr) c'est ce que j'ai fait et cela fonctionne bien sur ton fichier :
https://www.cjoint.com/c/LAvlLkzZdFW
Cdlmnt
Via
Non je ne connais pas cette commande
Mais pour qu'une variable reste enregistrée c'est bien le fait de la déclarer Public qui le permet (tant que le fichier est ouvert bien sûr) c'est ce que j'ai fait et cela fonctionne bien sur ton fichier :
https://www.cjoint.com/c/LAvlLkzZdFW
Cdlmnt
Via
Bonjour,
c'est pour Word!
Pour répondre à ta demande, sers-toi du Gestionnaire de nom:

voici le code qui gardera en mémoire les 2 possibilités à adapter:
voilà
ActiveDocument.Variables.Add Name
c'est pour Word!
Pour répondre à ta demande, sers-toi du Gestionnaire de nom:

voici le code qui gardera en mémoire les 2 possibilités à adapter:
Option Explicit Sub Toggle() Dim monTab As Variant Dim monTab2 As Variant Dim A As Variant monTab = [Départ] monTab2 = [Arrivée] If Range("B2").Value = "Départ" Then Range("B2").Value = "Arrivée" A = Range("B3:B6") Names.Add Name:="Départ", RefersTo:=A 'Formule- Gestionnaire de noms Range("B3:B6") = monTab2 Else Range("B2").Value = "Départ" A = Range("B3:B6") Names.Add Name:="Arrivée", RefersTo:=A 'Formule- Gestionnaire de noms Range("B3:B6") = monTab End If End Sub
voilà
Bonjour
N'ayant pas reçu de réponse, il est possible que je n'ai pas été assez explicite.
Le Toggle permettrait d'afficher dans la même colonne 2 séries de valeurs.
Il faut donc stocker les valeurs de la première série (Départ), avant d'afficher la seconde série (Arrivée : A,B,C,D), car en revenant sur Départ, on doit retrouver la série Départ (1,2,3,4).
J'arrive à stocker dans la variable Stock, mais à la réinjection elle semble vide, sans que je comprenne pourquoi.
Voici un autre exemple commenté :
Merci par avance !
N'ayant pas reçu de réponse, il est possible que je n'ai pas été assez explicite.
Le Toggle permettrait d'afficher dans la même colonne 2 séries de valeurs.
Il faut donc stocker les valeurs de la première série (Départ), avant d'afficher la seconde série (Arrivée : A,B,C,D), car en revenant sur Départ, on doit retrouver la série Départ (1,2,3,4).
J'arrive à stocker dans la variable Stock, mais à la réinjection elle semble vide, sans que je comprenne pourquoi.
Voici un autre exemple commenté :
https://www.cjoint.com/c/LAuimRPIczr
Merci par avance !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Via
D'abord merci pour le temps consacré à mon problème, et pour avoir remis de l'ordre dans ma macro.
Unfortunately ça ne fonctionne pas.
Hier, j'ai poussé un peu et je suis tombé sur cet article chez Microsoft :
... disant que "À la fin de l'exécution d'une macro, les valeurs stockées dans ses variables ne sont pas enregistrées automatiquement"
Donc au moment où je veux remettre le Range dans "Arrivée", la variable Stock est vide.
Ils parlent d'une fonction
Connais-tu cette commande ?
Merci pour ton aide et bonne journée
D'abord merci pour le temps consacré à mon problème, et pour avoir remis de l'ordre dans ma macro.
Unfortunately ça ne fonctionne pas.
Hier, j'ai poussé un peu et je suis tombé sur cet article chez Microsoft :
https://docs.microsoft.com/fr-fr/office/vba/word/concepts/miscellaneous/storing-values-when-a-macro-ends
... disant que "À la fin de l'exécution d'une macro, les valeurs stockées dans ses variables ne sont pas enregistrées automatiquement"
Donc au moment où je veux remettre le Range dans "Arrivée", la variable Stock est vide.
Ils parlent d'une fonction
ActiveDocument.Variables.Add Name:="Stock", Value:=Range("B3:B6")mais même sur le forum CCM, rien sur le sujet, ça doit être peu utilisé.
Connais-tu cette commande ?
Merci pour ton aide et bonne journée
Merci bien Via, en effet cela fonctionne à présent, mais je n'ai pas trouvé ma bêtise. J'ai bien compris l'utilisation d' une variable Public maintenant. Adapté à mon fichier ça fonctionne aussi, je trouve ça plutôt sympa comme fonction, je la réutiliserai ailleurs.
Bonjour Le Pivert
Effectivement ça sort de Word, c'est certainement la raison pour laquelle je n'ai rien trouvé ...sur Excel :)
Merci à toi pour le temps que tu as passé sur mon souci.
J'ai testé :
... et ça fonctionne aussi !
L'avantage c'est de travailler en listes nommées, c'est plus souple.
En tout cas une fois de plus un grand merci à vous 2, je vénère ce forum, continuez ainsi.
Bonjour Le Pivert
Effectivement ça sort de Word, c'est certainement la raison pour laquelle je n'ai rien trouvé ...sur Excel :)
Merci à toi pour le temps que tu as passé sur mon souci.
J'ai testé :
https://www.cjoint.com/c/LAvqjhkSbgr
... et ça fonctionne aussi !
L'avantage c'est de travailler en listes nommées, c'est plus souple.
En tout cas une fois de plus un grand merci à vous 2, je vénère ce forum, continuez ainsi.
Bonsoir
Avec du recul, même si les codes fonctionnent sur le moment, au bout de quelques manips je perds les contenus des variables. Donc mieux vaut ne pas l'utiliser.
J'ai réussi à faire autrement (colonnes intermédiaires), mais plusieurs choses à retenir :
- les variables s'effacent si une autre feuille est sélectionnée, ou si une autre macro est lancée, et cela même si les variables sont définies en Public en dehors de la Sub.
- ces deux macros ne fonctionnent que si elles sont seules dans le module.
Encore merci à vous deux.
Avec du recul, même si les codes fonctionnent sur le moment, au bout de quelques manips je perds les contenus des variables. Donc mieux vaut ne pas l'utiliser.
J'ai réussi à faire autrement (colonnes intermédiaires), mais plusieurs choses à retenir :
- les variables s'effacent si une autre feuille est sélectionnée, ou si une autre macro est lancée, et cela même si les variables sont définies en Public en dehors de la Sub.
- ces deux macros ne fonctionnent que si elles sont seules dans le module.
Encore merci à vous deux.
La méthode que je t'ai donné ici:
https://forums.commentcamarche.net/forum/affich-37496092-fonction-toggle#5
garde en mémoire, même après fermeture du classeur, les données dans le Gestionnaire de noms
Dans le classeur que tu as montré, cela ne pouvait pas fonctionner!
Tu as mis Option Explicit en plein milieu du module!
Option Explicit se met au début du module tout en haut. Cela sert à déclarer les variables
Voilà à toi de jouer!
https://forums.commentcamarche.net/forum/affich-37496092-fonction-toggle#5
garde en mémoire, même après fermeture du classeur, les données dans le Gestionnaire de noms
Dans le classeur que tu as montré, cela ne pouvait pas fonctionner!
Tu as mis Option Explicit en plein milieu du module!
Option Explicit se met au début du module tout en haut. Cela sert à déclarer les variables
Voilà à toi de jouer!