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 :

Api Windows et VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut Api Windows et VBA Excel
    Bonjour,

    J'ai un petit probleme avec un API windows sous excel, voila cet api sert à ouvrir une fenetre de selection de couleur et retourne la valeur de la couleur selectionnée, le problème est que lorsque cette fenetre s'ouvre, la valeur par defaut est le noir apparement, et je voudrais changer cette valeur par defaut.
    Commet puis je faire, voila le module, merci d'avance pour votre aide :

    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
    Option Explicit
     
    Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
    "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
    Private Type CHOOSECOLOR
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        rgbResult As Long
        lpCustColors As String
        flags As Long
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
    Public Function ShowColor(Handle As Long) As Long
        Dim cc As CHOOSECOLOR
        Dim Customcolors As String
        Dim lReturn As Long
     
        'set the structure size
        cc.lStructSize = Len(cc)
        'Set the owner
        cc.hwndOwner = Handle
        'set the custom colors (converted to Unicode)
        cc.lpCustColors = StrConv(Customcolors, vbUnicode)
        'no extra flags
        cc.flags = 0
        'DefColor = Cells(Lig2, Col2)
        'Show the 'Select Color'-dialog
        If CHOOSECOLOR(cc) <> 0 Then
            ShowColor = cc.rgbResult
            Customcolors = StrConv(cc.lpCustColors, vbFromUnicode)
        Else
            ShowColor = Cells(Lig, Col)
        End If
    End Function

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Bon si personne ne veut répondre, pouvez vous me dire au moins ou je peut trouver le détail de la librairie "comdlg32.dll"


    merci bien !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Merci, mais je l'ai deja, je ne cherchais pas à le dl, je veut connaitre le detail des fonctions existantes dans cette librairie pour pouvoir charger une valeur pas defaut dans cet api, je sais que c'est possible car j'ai vu ça dans "swftext"

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Connait pas cette API. Une question : est-ce que la propriété rgbResult est Read only ou pas ? Peux-tu l'initialiser avant l'affichage de la fenêtre ?

    Christophe

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Salut, aparement on peut l'initialiser avant, mais je sais pas ce que je doit lui mettre, un RGB(,,,), un hex ou un decimal...?

  7. #7
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Que reçois-tu après l'affichage ? Si la propriété donne un chiffre, c'est donc un chiffre qu'il faut lui donner en entrée.

    Je te propose ceci : affiche la dialogue, clique sur la couleur que tu aimerais avoir par défaut; identifie le code que tu reçois après coup.

    Réutilise ce même code lors de l'initialisation.

    Trop simple ?

    Une fois encore : je ne connais pas cette API, je te répond donc d'après mon "bon sens"

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Re merci,

    Bon avant de partir manger tout à l heure j'ai testé, donc ça me renvoi un chiffre, j'ai donc essayé d'initialiser rgbResult avec la valeur 65535(jaune),
    mais rien à faire valeur de défaut toujours le noir, j'ai essayé de lui mettre la valeur en RGB, ça fait la meme chose.
    Je sais plus quoi faire.

  9. #9
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Et cà...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Type CHOOSECOLOR
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        rgbResult As Long
        lpCustColors As String
        flags As Long
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
    Je ne connais pas l'API.
    la valeur de la couleur par défaut n'est-elle pas plutôt à mettre dans "lpCustColor". Oui une chaine. Alors du style

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Marche po

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    C'est Ok ça marche avec ça :

    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
    Option Explicit
     
    Private Type TCHOOSECOLOR
        lStructSize As Long
        hWndOwner As Long
        hInstance As Long
        rgbResult As Long
        lpCustColors As Long
        Flags As Long
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As Long
    End Type
     
    Private Declare Function ChooseColor Lib "COMDLG32.DLL" Alias _
            "ChooseColorA" (Color As TCHOOSECOLOR) As Long
     
    Public CustomColors(0 To 15) As Long
    Public Function ColorDlg(hWndParent As Long, DefColor As Long, _
           Optional ShowExpDlg As Boolean = 0) As Long
     
       Dim I
       Dim C As Long
       Dim CC As TCHOOSECOLOR
     
       'Initialise Custom Colours
       For I = 0 To 15
          CustomColors(I) = QBColor(15)
       Next I
     
       'Show Dialog
       With CC
     
           .rgbResult = DefColor
           .hWndOwner = hWndParent
           .lpCustColors = VarPtr(CustomColors(0))
           .Flags = &H101
     
           If ShowExpDlg Then .Flags = .Flags Or &H2
     
           .lStructSize = Len(CC)
           C = ChooseColor(CC)
     
           If C Then
              ColorDlg = .rgbResult
           Else
              ColorDlg = -1
           End If
     
       End With
     
    End Function

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

Discussions similaires

  1. [Toutes versions] La problématique l'encapsulation des API Windows en VBA
    Par mumen dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/03/2013, 02h27
  2. API OVH en VBA Excel, possible?
    Par unconnu dans le forum Conception
    Réponses: 0
    Dernier message: 30/11/2009, 13h09
  3. [VBA-E]Fermeture de windows à partir d'Excel
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/04/2007, 09h22
  4. [VBA EXCEL] Macro commande vba vers windows
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2007, 13h05
  5. Réponses: 69
    Dernier message: 15/06/2006, 12h42

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