IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Mise à jour du ruban [AC-2007]


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut Mise à jour du ruban
    Bonjour,

    Mon problème est assez bizarre.
    J'ai un formulaire de base que j'appellerai "Form1" qui contient un ruban que j'appellerai "ruban1" et quelques autres formulaires associés à des rubans personnalisés selon le formulaire appelé (Ex.: form2 avec ruban2, form3 avec ruban3). Mon formulaire de base est toujours affiché.

    Dans le ruban1 du formulaire de base "Form1", j'ai un bouton qui indique un résultat du compteur d'étiquettes. Ces étiquettes sont dans un sous-formulaires du "Form1" que j'appellerai "sous-Form1" et qui permet de cocher le champs "dImpEti" qui sert à indiquer si je veux des étiquettes oui ou non
    (voir image jointe). Ce bouton sert aussi à gérer l'impression des étiquettes (cela fonctionne très bien).

    Lorsque je suis dans l'écran "Form1" et que je clique dans le sous-formulaire sur le champ "dImpDos", mon compteur dans le ruban se met à jour sans problème.

    Mon problème est lorsque j'ouvre et ferme un autre formulaire, je n'arrive plus à rafraichir mon compteur.
    Exemple je veux afficher les infos de la ligne choisie, je clique sur la colonne du champ "Cote" pour afficher "Form2" avec le ruban2. Lorsque je referme ce formulaire, pour revenir à mon formulaire de base "Form1", si je clique dans le champs "dImpDos" du sous-form1, mon compteur ne se met plus à jour.

    Voici une partie de ma programmation:
    Dans mon champ "dImpDos", j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub dImpDos_Click()
    ' rafraichir la liste avant la MAJ.
        Me.Refresh
    End Sub
    Private Sub dImpDos_AfterUpdate()
       '  mettre à jour le rubanDO
       If Not (oMonRuban Is Nothing) Then
            oMonRuban.InvalidateControl ("btnDosEDos")
       End If
    End Sub
    Dans le ruban1, mon bouton qui affiche le résultat du compteur est "btnDosEDos"
    Dans mon fichier XML, je demande à mon bouton de mettre à jour le label comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <button id="btnDosEDos" size="normal" description="Imprimer les étiquettes de dossiers" onAction="subSousMenusDO" supertip="Cliquer pour Imprimer les étiquettes des dossiers." screentip="Imprimer les étiquettes des dossiers." getLabel="getCompteur" getEnabled="Ruban_GetEnabled"/>
    Dans VBA, j'ai programmé dans un module ma gestion du compteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub getCompteur(control As IRibbonControl, ByRef Text)
    ... (j'ouvre les tables et vérifie le nombre d'étiquettes que je garde dans la variable intCptD, puis affecte le résultat à "text")
     
        Select Case control.ID
            Case "btnDosEDos"     ' BOUTON dossier
                  If intCptD < 1 Then
                   Text = 0
                Else
                   Text = str(intCptD)
                End If
    ....
    Ce que je ne comprends pas, c'est que lorsque je ferme un autre écran, je n'arrive plus à mettre à jour mon compteur en cliquant sur le champ "dImpDos" dans mon écran principal et ce même si je ne modifie rien dans la fenêtre que je viens de fermer.

    Pourquoi mon compteur arrête-t-il de fonctionner après la fermeture d'autres écrans?

    Merci
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Où est déclaré oMonRuban ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut
    Mon ruban est ouvert et déclaré dans un module commun. Voici ce que j'ai comme code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Public oMonRuban As IRibbonUI
    Public stFenetre As String
    Public stControlTextG As String
    Public stControlTextAv As String
    Public stControlTextAvC As String ' pour retenir le critere
     
     
    '*************  RUBANS *******************************
     
    Sub getMonRuban(Ribbon As IRibbonUI)
     'avoir le nom du ruban
        Set oMonRuban = Ribbon
    End Sub
    ' ************************
    Public Function fonChargerRuban()
    ' ************************
    '  Fonction pour charger un ruban
    '            MAJ 2013-09-02 LP
    ' ************************
        Const FICHIER_XML_DOSSIERS As String = "LOG_rubanDos.xml"
        Const FICHIER_XML_BIBLIO As String = "LOG_rubanBB.xml"
        Const FICHIER_XML_DosAdd As String = "LOG_rubanDosAdd.xml"
     
        Const RUBAN_Log_rubanDos As String = "LOG_rubanDos"
        Const RUBAN_Log_rubanBB As String = "LOG_rubanBB"
        Const RUBAN_LOG_rubanDosAdd As String = "LOG_rubanDosAdd"
     
        fonChargerRuban = True
        ' ***  appel la procédure pour ouvrir le fichier et charge chaque ruban
        subOuvrirRuban RUBAN_Log_rubanDos, FICHIER_XML_DOSSIERS
        subOuvrirRuban RUBAN_Log_rubanBB, FICHIER_XML_BIBLIO
        subOuvrirRuban RUBAN_LOG_rubanDosAdd, FICHIER_XML_DosAdd
    End Function
     
    ' ************************
     
    Private Sub subOuvrirRuban(ByVal NomRuban As String, ByVal FichierXML As String)
    ' ************************
    ' Procédure pour ouvrir les rubans
    '            MAJ 2013-09-02 LP
    ' ************************
     
     On Error GoTo Err_OuvrirRuban
     Const DEJA_CHARGER As Long = 32609
     
        Dim strXML As String
        Dim oFso As New FileSystemObject
        Dim oFtexte As TextStream
        '  éviter de charger 2 fois le ruban
     
        'Charge le fichier XML en mémoire
         Set oFtexte = oFso.OpenTextFile(CurrentProject.Path & _
             "\Donnees\" & FichierXML, ForReading)
       'Récupère le contenu
        strXML = oFtexte.ReadAll
        'Charge le rubban personnalisé correspondant
        Application.LoadCustomUI NomRuban, strXML
        oFtexte.Close
    Exit_ErrOuvrirRuban:
        Set oFtexte = Nothing
        Exit Sub
     
    Err_OuvrirRuban:
        If Err = DEJA_CHARGER Then
            ' ce ruban a déjà été chargé
        Else
            ' autre erreur de chargement
            MsgBox "Procédure subOuvrirRuban " & Err.Description & "   " & CurrentProject.Path & "   " & FichierXML, vbExclamation, Err.Number
        End If
        Resume Exit_ErrOuvrirRuban
    End Sub
    C'est comme si la mise à jour du ruban et entre autre le bouton visé, ne se mettait pas à jour. Pourtant je demande de fermer mon écran2 et de retourner à la "form1" puis je demande la mise à jour du ruban1 avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oMonRuban.InvalidateControl "btnDosEDos"
    Pourtant, avec le débuggeur, je vois qu'il passe bien sur cette ligne.

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et en rafraichissant tout le ruban ?


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut
    J'ai essayé et cela fait la même chose.
    Avec le débuggeur, j'ai vu qu'il allait dans ma condition pour faire "oMonRuban.InvalidateControl "btnDosEDos"" et après il allait directement au "End If"

    Normalement, si je n'ouvre pas d'autre fenêtre et que j'utilise le débuggeur de la même façon, soit sur la ligne mentionnée ci-haut, j'ai le message d'erreur " Le logiciel can't run the macro or callback fonction getcompteur...."

    Ce qui est normal, puisque le débuggeur crée cet erreur. Si j'enlève le "Breakpoint", et que je n'ouvre pas de fenêtre, mon compteur fonctionne bien.

    Mais dès que j'ouvre une nouvelle forme AVEC UN AUTRE RUBAN, le compteur ne se met pas à jour. Je viens de faire un test. J'ai mis le même ruban pour la form2 et je l'ai ouvert et fermé. Résultat, je peux mettre à jour mon compteur.
    Lorsque j'utilise plus d'un ruban, comment doit-on mettre à jour le ruban1?
    Parce qu'on dirait que mon problème est là!

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Y a-t-il un seul ruban qui appelle getMonRuban ?

    Ce que je crois qu'il se passe :
    1er affichage ruban1 -> oMonRuban référence ruban1
    1er affichage rubanX -> oMonRuban référence rubanX

    A+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut
    Il semblerait que ce soit cela.
    Je viens de trouver comment appeler mes rubans.

    Merci beaucoup pour votre aide.

    Voici pour ceux que cela peux aider, comment aller chercher des rubans.

    Ce code est écrit dans un module de VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Option Compare Database
    Option Explicit
    ' *****************************
    '  Module : modRibbon
    '  Procédures pour ouvrir et gérer les rubans
    '         MAJ 2013-10-27 LP
    ' *****************************
     
    Public oMonRuban As IRibbonUI
    Public oMonRubanADD As IRibbonUI
    Public oMonRubanBB As IRibbonUI
    ...
     
    '************* appels des RUBANS ***************
     
    Sub getMonRuban(Ribbon As IRibbonUI)
     'avoir le nom du ruban principal
     Set oMonRuban = Ribbon
    End Sub
    Sub getMonRubanADD(Ribbon As IRibbonUI)
    'avoir le nom du ruban secondaire
        Set oMonRubanADD = Ribbon
    End Sub
    Sub getMonRubanBB(Ribbon As IRibbonUI)
     'avoir le nom du ruban de la bibliothèque
         Set oMonRubanBB = Ribbon
    End Sub
    '  ***************
    ...
    et dans le fichier XML de chaque ruban, il faut indiquer le nom de la procédure à lire:
    Exemple:
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="getMonRuban">
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="getMonRubanADD">
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="getMonRubanBB">
    ' ***************

    Encore une fois merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/10/2013, 11h40
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo