Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 09/10/2008, 11h17   #1 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2007
Localisation: Varsovie/Pologne
Âge: 23
Messages: 57
Par défaut ThisWorkbook.MaVar réinitialisée au click sur un bouton

Bonjour,

Rien trouvé dans le FAQ ni sur le forum donc voilà :

J'ai ajouté une CommandBar et des boutons. Comme mes macros modifient l'état de mes boutons j'ai besoin de les appeler. Pour éviter tout problème d'indexage, je n'utilise pas l'index du bouton dans la barre mais je créé une "instance" dans ThisWorkbook. Première fois où j'utilise le bouton A pas de problème. Si je l'utilise une deuxième fois par contre avant même de rentrer dans le OnAction du bouton A cliqué, l'instance du bouton B se met à Nothing...

J'ai débuggé jusqu'au bout du premier appel du au bouton A mais l'instance du bouton B est toujours normale. C'est au moment où je clique une deuxième fois sur bouton A que ça foire.

Merci d'avance.


Rag

Dernière modification par Ragmaxone ; 09/10/2008 à 11h36
Ragmaxone est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 11h38   #2 (permalink)
Rédacteur/Modérateur
 
Avatar de Pierre Fauconnier
 
Date d'inscription: novembre 2003
Localisation: Theux (Belgique)
Âge: 41
Messages: 3 112
Envoyer un message via Skype™ à Pierre Fauconnier
Par défaut

Bonjour

Sans le code, c'est un peu comme jouer à Madame Soleil sans boule de cristal.

Deux choses, toutefois:
Tu peux utiliser la propriété Tag du bouton pour l'identifier. C'est une solution que j'emploie avec bonheur depuis longtemps.

Lors du clic sur un bouton de barre de commande, on peut identifier le bouton sur lequel on a cliqué car il est renvoyé par
Code :
commandbars.ActionControl
On peut donc récupérer son Tag facilement
Code :
commandbars.ActionControl.Tag
__________________
Pierre Fauconnier
--------------------
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
Pensez au tag

Mon blog sur DVP - Mes petits papiers sur DVP
Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non.
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 11h47   #3 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2007
Localisation: Varsovie/Pologne
Âge: 23
Messages: 57
Par défaut

Lol, désolé pour le manque de code mais comme y'en a un roman... enfin voilà :

Code :
Public guzBar As CommandBar
 
Public guzSel As CommandBarButton
 
Private Sub Workbook_Activate()
    tmpAler = Application.DisplayAlerts
    tmpScre = Application.ScreenUpdating
    Set guzBar = Application.CommandBars.Add(Name:="guziki", Position:=msoBarBottom, Temporary:=True)
    With guzBar
        .Protection = msoBarNoMove + msoBarNoCustomize
        Set guzSel = .Controls.Add(Type:=msoControlButton)
        With guzSel
            .Style = msoButtonCaption
            .Caption = "Selekcja"
            If ActiveSheet.EnableSelection = xlNoSelection Then
                .State = msoButtonUp
            Else
                .State = msoButtonDown
            End If
            .OnAction = "ThisWorkbook.selekcja"
        End With
End Sub
 
Private Sub Workbook_Deactivate()
    Application.CommandBars("guziki").Delete
    Application.DisplayAlerts = tmpAler
    Application.ScreenUpdating = tmpScre
End Sub
 
Sub lanceForm() 'lance la procedure de recherche (ie affiche le form)
    Application.ScreenUpdating = False
    odzasuwa
    Load formKal
    formWyszuk.Show
    zasuwa
    guzSel.State = msoButtonUp
    Application.ScreenUpdating = True 'tmpScre
    wyniki.Range("a1").Select
    ActiveWindow.ScrollRow = 1
    ActiveWindow.ScrollColumn = 1
End Sub
 
Sub zasuwa()
    For Each ssheet In Sheets
        ssheet.Protect contents:=True, UserInterfaceOnly:=True
        ssheet.EnableSelection = xlNoSelection
    Next ssheet
End Sub
 
Sub odzasuwa()
    For Each ssheet In Sheets
        ssheet.Protect contents:=False
    Next ssheet
End Sub
 
Sub selekcja()
    With guzSel
        If .State = msoButtonUp Then
            .State = msoButtonDown
            For Each sheeet In ThisWorkbook.Sheets
                sheeet.EnableSelection = xlNoRestrictions
            Next sheeet
        Else
            .State = msoButtonUp
            For Each sheeet In ThisWorkbook.Sheets
                sheeet.EnableSelection = xlNoSelection
            Next sheeet
        End If
    End With
End Sub
En gros c'est la variable "guzSel" qui se met sur nothing au deuxième lancement de "lanceForm"... sachant que à la fin de la première exécution tout va bien.

Pour ce qui est du tag j'y pensais pu, trop entêté dans mon truc...

Je teste l'histoire du tag mais j'aimerais bien savoir pourquoi cette variable est zapée...

voilà, avec la définition du tag de chaque bouton et l'utilisation de
Code :
Application.CommandBars("MaBarre").FindControl(Tag:="TagDeMonBouton")
on retrouve n'importe quel bouton.

Je relance quand même pour ce qui est de la base du problème initial, une réponse me soulagerait...


Merci Pierre.


Rag

Dernière modification par AlainTech ; 05/11/2008 à 15h12
Ragmaxone est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/11/2008, 10h11   #4 (permalink)
Invité régulier
 
Date d'inscription: mai 2006
Localisation: Nantes
Âge: 23
Messages: 15
Par défaut

Citation:
Envoyé par Pierre Fauconnier Voir le message
Bonjour

Sans le code, c'est un peu comme jouer à Madame Soleil sans boule de cristal.

Deux choses, toutefois:
Tu peux utiliser la propriété Tag du bouton pour l'identifier. C'est une solution que j'emploie avec bonheur depuis longtemps.

Lors du clic sur un bouton de barre de commande, on peut identifier le bouton sur lequel on a cliqué car il est renvoyé par
Code :
commandbars.ActionControl
On peut donc récupérer son Tag facilement
Code :
commandbars.ActionControl.Tag
Un petit up pour avoir une précision par rapport à cette propriété "Tag". Est-il possible de la définir via l'éditeur WYSIWYG de Word ? (je veux dire sans la définir dans une macro VBA)
Dagnir est déconnecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBAACCESS

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide