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 :

Décalation conditionnelle 64 bits (Windows API)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut Décalation conditionnelle 64 bits (Windows API)
    Bonjour,

    J'ai déjà pas mal lu d'article à propos des déclarations Declare et notamment par la différence de typage introduite par PtrSafe.

    Etrangement, quand j'écris par exemple la déclaration conditionnelle, la ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #If VBA7 And Win64 Then
        Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #Else
        Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) '<= apparaît en rouge
    #End If
    Avez-vous une explication ?

    Merci par avance !

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    L'éditeur vérifie la syntaxe (juste pour la coloration) en fonction de la version en cours d'utilisation, même sur les lignes non concernées par la compilation conditionnelle.

    C'est rouge mais ça ne veut pas dire grand chose.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut
    Merci, je dois avouer ne pas avoir eu le courage de lancer une macro dans ces conditions...

    Du coup, je me pose une autre question similaire. Je développe une macro sous Excel 2013 et il faut qu'elle soit également compatible avec Excel 2010 moyennement quelques "allégement".

    Le code suivant plante, car la constante msoChartFieldRange de type MsoChartFieldType n'existe pas dans Office 2010. Est-ce possible de contourner ce problème ? Je tiens à préciser que je souhaite vérifier la version d'Office dans la version et non avant son appel. Je guère non plus envie de redéfinir la constante, ce que je crains être inévitable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
     
        If Application.Version < "15.0" Then Exit Sub
     
        '...
     
        Dim srs As Series
     
        srs.DataLabels.Format.TextFrame2.TextRange.InsertChartField ChartFieldType:=msoChartFieldRange, _
                                                                                            Formula:=Range(...), _
                                                                                            Position:=-1
        '...
     
    End Sub

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    C'est une nouvelle caractéristique de Excel 2013. À part que de créer l'équivalent en Excel 2010, il n'y a pas vraiment d'autre solution que de t'en passer. En général, c'est mieux de développer sur la version la plus ancienne. Ils font plus attention à la compatibilité ascendante qu'à la compatibilité descendante.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 30
    Points
    30
    Par défaut
    Tu peux utiliser le valeur de la Enum/Constante msoChartFieldRange au lieu de son nom ... Dans votre cas vous mettrez 7

    Aussi tu peux utiliser la Method CallByName sur l'object TextRange et gerer l'erreur 438

    PS:
    SVP - ignore la premiere proposition car je viens de realiser que la Method InsertChartField n'existe pas dans excel 2010

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 30
    Points
    30
    Par défaut
    Essaie cela :

    Ce code ne produit pas d'erreur de compilation en excel 2010 meme si la propriéte InsertChartField n'existe pas.

    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
    Sub ExampleCallByName()
     
        Dim oTextFrame2 As TextFrame2
        Dim oObj As Object
     
        Set oTextFrame2 = Feuil1.ChartObjects(1).Chart.SeriesCollection(1).DataLabels.Format.TextFrame2
     
        On Error Resume Next  'cette ligne fonctionne en excel 2013
            Set oObj = CallByName(oTextFrame2.TextRange, "InsertChartField", VbMethod, 7, ActiveCell ,1)
        On Error GoTo 0
     
        If oObj Is Nothing Then  'si oObj est Nothing donc on affaire a excel 2010
            Debug.Print "excel 2010"
            'Continue ici avec ton code alternatif pour excel 2010 ...
        End If
     
    End Sub

Discussions similaires

  1. Tcl/Tk 64 bits Windows
    Par jeanjou dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 02/07/2007, 13h28
  2. TNS : 12560 ;00530; 32-bit windows error
    Par hk027 dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 24/10/2006, 08h36
  3. Windows API
    Par couet dans le forum Windows
    Réponses: 4
    Dernier message: 15/05/2006, 13h31
  4. Windows API
    Par datax dans le forum Windows
    Réponses: 1
    Dernier message: 22/08/2005, 10h58
  5. [Windows]Api win32 pour java
    Par cpanette dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 27/06/2005, 15h06

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