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 :

Utilisation du type "Any" dans les methodes [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut Utilisation du type "Any" dans les methodes
    Bonjour,

    Toujours dans le cadre d'une maintenance applicative, je découvre le type "Any" dans du code VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
    J'ai besoin de savoir à quoi correspond ce type en vue de migrer vers une solution office 365 en 64 bits.

    Quelqu'un pourrait-il m'aider ?

    Cordialement

  2. #2
    Inactif  

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    En fait ta ligne est un appel à l'API Windows. Mais cela fait trop longtemps que je n'ai pas touché à cela.


    Ceci étant dit, aucun des contrôles ActiveX 32 bits de MS non inclus dans Office (Calendar, ListView, DateTimePicker etc.) n'est compatible avec un Office à 64 bits.
    Il doit toujours y avoir un article sur VBA et Office 64 bits sur MSDN.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    La ligne montrée n'est pas une méthode VBA, mais la déclaration, depuis VBA, d'une fonction de l'API de Windows.
    1) Any n'est pas à proprement parler un "type" et est utilisé pour remplacer (comme son nom l'indique clairement) tout type de variable. Any signifie donc de quelque type que ce soit.
    2)
    en vue de migrer vers une solution office 365 en 64 bits.
    ce ne sera pas forcément CET Any, qui posera le vrai problème, mais plutôt le type (long) de la fonction elle-même.
    On s'éloigne là du VBA.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Bonjour.

    Merci à vous pour ces réponses.

    Ce qui me trouble, c'est que j'ai déjà vu "Any" ailleurs dans d'autres code VBA.

    Pour information, voici un lien très pratique pour tous ceux qui doivent migrer des applis en 64 bits:
    https://arkham46.developpez.com/arti...a64bits/#LIV-B


    Mais là encore, on ne trouve aucune référence à "Any".

    Cordialement.

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Il me semble t'avoir déjà expliqué assez clairement ce que signifie ce "typage" Any, non ?
    Il est le même pour cette fonction de l'Api de Windows, lorsqu'elle est déclarée depuis VBA, quelle que soit la version (32 bits ou 64 bits), tant en ce qui concerne le paramètre source qu'en ce qui concerne le paramètre destination. Il n'en va par contre pas de même en ce qui concerne le dernier paramètre (longueur), à typer en long en 32 bits et en longptr en 64 bits.
    Je me refuse personnellement à aller plus loin, s'agissant bien plus de la connaissance d'une fonction de l'Api de Windows que de VBA. Le fait d'appeler cette fonction depuis VBA/Excel n'en fait pas du VBA.
    Il t'appartient, si tu y tiens, d'écrire ta déclaration sous forme de compilation conditionnelle (avec utilisation de ptrsafe), sur la base des indications précises que je t'ai données.
    Si leur compréhension t'échappe vraiment, il vaudra peut-être mieux que tu n'utilises pas cette fonction, au demeurant d'utilisation assez délicate et pouvant, en cas de non maîtrise, être la cause de splendides crashes.
    A toi de voir. Moi, j'arrête là ma participation à cette discussion.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Bonjour à tous.

    Pour ceux que cela intéresse, j'ai trouvé des informations sur Any dans "Office 2010 Developer Resources" qui est fourni par Microsoft pour aider les développeurs à migrer les applis en 64 bits.

    je site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    ' NOTE: The lpKeyName argument for , WriteProfileString, GetPrivateProfileString, and WritePrivateProfileString can be either a string or NULL.
    ' This is why the argument is defined as "As Any".
    ' For example, to pass a string specify ByVal "wallpaper" To pass NULL specify ByVal 0&
    ' You can also pass NULL for the lpString argument for WriteProfileString and WritePrivateProfileString
    Donc, si je comprends bien, Any est là pour dire que plusieurs types sont acceptés.
    Il suffit de reprendre le ce type tel quel pour la migration en 64 bits.

    @unparia
    Quand tu n'as rien à dire, ne dits rien. Et, épargnes nous ce "Bull shit".
    Je suis sur ce forum depuis 2006 ce qui fait 10 ans plus tôt que toi mais je ne fais pas la chasse au étoiles, moi.

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

Discussions similaires

  1. Utilisation des types entier non signés dans Win32
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2009, 10h04
  2. Utilisation des types de données bit dans SQL Server
    Par yanal dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/05/2008, 14h19
  3. Faut-il utiliser des underscores ou des espaces dans les noms des fichiers ?
    Par Invité dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 07/05/2008, 19h23

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