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   -
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 :
https://www.cjoint.com/c/LAtsPdsvajy


Par avance merci pour votre aide !

Configuration: Windows / Firefox 84.0
A voir également:

9 réponses

via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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 :
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
1
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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

1
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,


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à

1
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
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é :
https://www.cjoint.com/c/LAuimRPIczr


Merci par avance !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
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 :
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
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
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é :
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.
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
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.
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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!
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
D'accord, je vais réessayer.
Ton message explique beaucoup de ces comportements d'Excel.

Merci de me permettre de progresser.

Bonne soirée
0