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

Macros et VBA Excel Discussion :

EditBox dans fichier de personnalisation XML


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut EditBox dans fichier de personnalisation XML
    Bonjour à tous,

    J'ai dans un de mes fichiers Excel ajouté un fichier de personnalisation XML.
    Une partie du XML :
    Code xml : 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
    <box id="box01" boxStyle="vertical">
                            <editBox
                                id="edBxNumeroBadge"
                                label="Numéro de badge :"
                                onChange="edBxNumeroBadge_onChange"
                                screentip="Numéro de badge"
                                supertip="Le numéro de badge doit être compris entre 1 et 417."
                                sizeString="00000"
                                maxLength="3"
                                keytip="N"
                            />
                            <button 
                                id="btFilter"
                                imageMso="ZoomPrintPreviewExcel"
                                label="Filrer sur ce badge"
                                screentip="Filrer sur ce badge"
                                supertip="Permet de filtrer sur toutes les sorties de ce badge"
                                size="normal"
                                onAction="btFilter_onAction"
                                getEnabled="btFilter_Enabled"
                                keytip="FB"
                            />
                        </box>
    Ensuite dans le code VB j'ai toutes mes fonctions CallBack.

    Dans l'editBox je saisie un numéro de badge ensuite je clic sur le bouton Filtrer sur ce badge.


    Q1 : J'aimerais savoir s'il est possible de remplacer le clic bouton par un simple Enter dans l'editBox ?
    Q2 : Et pour aller plus loin, est il possible de forcer la saisie numérique autrement qu'avec un mélange de onChange et getText sur l'editBox (pas testé mais je pense ça possible) ?

    Merci d'avance à vous et bonne journée

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Re,

    Pour la question 1 je viens de m'apercevoir que le CallBack onChange est justement déclenché sur Enter (si modification) et non a chaque caractère saisie comme je le pensais.
    Il me reste a régler le fait de ne pas modifier le contenu de l'ediBox et de presser Enter.

    Et pour la Q2, la méthode que j'imaginais n'est plus possible.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je ne maîtrise pas vraiment le editbox; mais tu na pas un truc comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then MsgBox "test"
    End Sub

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour robert,

    Merci de ton intérêt.
    Je ne pense pas qu'un évènement comme keyPress soit disponible car déjà l'évènement Change est diffèrent (à chaque caractères dans un TextBox et une fois la saisie complète et validée par Enter dans un editBox).

    Toute fois je pense (et j'espère) que nous pouvons plus ou moins facilement simuler ce comportement. Ce qui me fait penser à ça c'est que en théorie on devrait pouvoir recréer tout le ruban natif d'Excel (je peux me tromper) et par exemple lorsqu'on change la taille de la police, Enter vaut pour action.

    Je trouve très peu d'info sur le net a ce sujet et même sur l'aide en ligne de Microsoft.
    lien msdn
    Je ne sais pas si la liste des attributs est exhaustive.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec l'exemple en pièce jointe.

    1) Code XML
    Code xml : 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
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RubanCharge">
    <!-- onLoad="RubanCharge" est déclenché lors du chargement du ruban personnalisé. -->
        <ribbon startFromScratch="false">
            <tabs>
                <tab id="OngletPerso" label="Test">
                    <group id="GR01" label="Exemple utilisation editBox">
    			<box id="Box01" boxStyle="horizontal">                    
    				<editBox id="editBox01" 
    					label="Saisissez le code :"
    					onChange="RecupDonnee"
    					screentip="Le code doit contenir 5 caractères maximum." 
    					sizeString="99999"
    					getText="GetEditBoxText"
    					maxLength="5"/>
    			</box>
                    </group>
                </tab>
            </tabs>
        </ribbon>
    </customUI>

    2) Code VBA dans un module Standard
    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
    Public objRuban As IRibbonUI
    Public boolResult As Boolean
    Dim Cible As String
     
    'Callback for customUI.onLoad
    Sub RubanCharge(ribbon As IRibbonUI)
    boolResult = False
    Set objRuban = ribbon
    End Sub
     
    'Callback for editBox01 getText
    Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
    returnedVal = Cible
    If Cible <> "" Then [a1] = Cible  'pseudo traitement (à remplacer par le vrai)
    returnedVal = ""  'Efface l'EditBox
    End Sub
     
    'Callback for editBox01 onChange
    Sub RecupDonnee(control As IRibbonControl, text As String)
    '/// Tests de validité ///
    '--- Si c'est un nombre avec décimale ---
    If IsNumeric(text) Then Cible = CStr(Application.WorksheetFunction.RoundDown(text, 0))
    '--- Si ce n'est pas un nombre ---
    If Not IsNumeric(text) Then
      MsgBox "Le numéro de badge doit être un nombre compris entre 1 et 417."
      Cible = ""
    '--- Si le nombre est hors bornes ---
    ElseIf CLng(text) < 1 Or CLng(text) > 417 Then
      MsgBox "Le numéro de badge doit être compris entre 1 et 417."
      Cible = ""
    End If
    '/// Mise à jour de l'EditBox ///
    objRuban.InvalidateControl ("editBox01")
    End Sub

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour,

    Merci PMO, ton code fonctionne mais j'ai quand même quelques problèmes.

    onChange d'un editBox est déclenché sur validation par entrer dans le champ de l'editBox.
    L'ajout de getTextsert en fait a vider le champ après validation si je comprend bien ? Quand est déclenché getText?

    Le problème que j'ai est que maintenant getTextest déclenché sur changement de selection dans la feuille.
    Voila le code dans le module de la feuille :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim NB&, ligne&, colonne&, Enab As Boolean
            NB = Target.Cells.Count
            ligne = Target.Row
            colonne = Target.Column
        Enab = (NB = 1) And (ligne = 3) And (colonne >= eColSODEXO.Badge1) And (colonne < eColSODEXO.Badge1 + Nb_Badge)
        If ligne = 3 Then
            BoolEnab_btLostCard = Enab And ActiveCell.Offset(-1, 0).Value <> "P"
            BoolEnab_btFoundCard = Enab And ActiveCell.Offset(-1, 0).Value = "P"
        Else
            BoolEnab_btLostCard = False
            BoolEnab_btFoundCard = False
        End If
        BoolEnab_btOpenUFAjout = (Target.Rows.Count = 1 And shSODEXO.Cells(Target.Row, 3) <> "")
        If Not MonRuban Is Nothing Then MonRuban.Invalidate
    End Sub
    C'est MonRuban.Invalidate qui lance getText?

    Comme getTextest exécuté mais pas onChangeça fait des choses un peu étranges comme lancer la macro sur simple changement de sélection sans même que l'editBoxsoit renseigné car NumeroBadgevaut encore la précédente recherche.

    Merci d'avance pour vos pistes

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour antonysansh ,

    C'est MonRuban.Invalidate qui lance getText?
    OUI cela lance le getText.
    Pour vous en rendre compte placez un Stop dans le code de getText comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
    Stop  '///
    returnedVal = Cible
    If Cible <> "" Then [a1] = Cible  'pseudo traitement (à remplacer par le vrai)
    returnedVal = ""  'Efface l'EditBox
    End Sub
    Je ne suis pas en situation mais mettre l'instruction "If Not MonRuban Is Nothing Then MonRuban.Invalidate" dans une procédure événementielle est-elle utile et judicieuse ???

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

Discussions similaires

  1. Balise html dans fichier XML
    Par pierrox dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 19/09/2005, 10h20
  2. context-param dans fichier web.xml
    Par vicros dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/08/2005, 14h42
  3. [XML] Incorporation de balises HTML dans fichier XML
    Par wazzzzza dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 26/07/2005, 15h17
  4. [JDOM] Ajout élément dans fichier XML
    Par delinot dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 18/07/2005, 12h10
  5. Pb de balises dans fichier XML
    Par allstar dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 14h59

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