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

Excel Discussion :

Vérification de la version Excel et chargement de library via code VBA [XL-2007]


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut Vérification de la version Excel et chargement de library via code VBA
    Bonjour,

    J’utilise un fichier excel partagé en réseau par 3 utilisateurs avec 2 versions d’excel différentes :
    - 2007 (12.0.6787.5000) SP3 MSO (12.0.6785.5000) 32 bits
    ET
    - 2016 (16.0.4954.1000) MSO (16.0.4939.1000) 32 bits

    Jusqu’à présent (version 2007), lors de l’utilisation de ce fichier les library suivantes sont requises :
    - Microsoft Outlook 12.0 Object Library,
    - Microsoft Word 12.0 Object Library,

    Lorsque l’on utilise la version 2016 les bibliothèques suivantes sont insérées par défaut (automatiquement) sans problème:
    - Microsoft Outlook 16.0 Object Library,
    - Microsoft Word 16.0 Object Library,
    Malheureusement, en retournant ensuite sur une version 2007, il recherche la version 16.0 qui évidement n’existe pas… et donc génère un bug.

    Je peux recharger manuellement les bibliothèques 12.0 pour régler le problème mais j’aimerai savoir si, par le code, on peut lui faire charger la bibliothèque ad hoc en fonction de la version.

    En vous remerciant par avance,

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut Late Binding
    Salut

    Pour une mise en exploitation, il vaudrait mieux faire du late binding. C'est à dire déclarer ta variable en objet puis au sein du code, définir à quel type d'instance elle fait référence.
    J'utilise de préférence le early binding (en utilisant les référence proposées dans Outil) durant la phase de développement pour avoir l'autocomplétion du code. Mais une fois la structure du code réalisé, il vaut mieux pour éviter les problèmes de version, passer sur du Late Binding.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut Lieu de déclaration ?
    Citation Envoyé par Qwazerty Voir le message
    Salut

    Pour une mise en exploitation, il vaudrait mieux faire du late binding. C'est à dire déclarer ta variable en objet puis au sein du code, définir à quel type d'instance elle fait référence.
    J'utilise de préférence le early binding (en utilisant les référence proposées dans Outil) durant la phase de développement pour avoir l'autocomplétion du code. Mais une fois la structure du code réalisé, il vaut mieux pour éviter les problèmes de version, passer sur du Late Binding.

    ++
    Qwaz
    Bonjour,

    C'est ce que je pense avoir fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim wrdApp As Object
    [...]
    Set wrdApp = CreateObject("Word.Application")

    mais si je ne charge pas la library 12.0 ou 16.0 il génère un bug. Est ce un problème de portée de mes variables?

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Citation Envoyé par Boulatwo Voir le message
    Bonjour,

    C'est ce que je pense avoir fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim wrdApp As Object
    [...]
    Set wrdApp = CreateObject("Word.Application")

    mais si je ne charge pas la library 12.0 ou 16.0 il génère un bug. Est ce un problème de portée de mes variables?
    Oui c'est ça, la code s'arrête sur quelle ligne?
    Il n'y a pas besoin d'activer les références avec ce type d'écriture.

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme l'a signalé Quaz, que je salue au passage, pour éviter les problèmes il est préférable d'utiliser le Late Binding.
    Cependant pour profiter des avantages du Earcly Binding et notamment l'IntelliSense il est possible d'utiliser la compilation conditionnelle
    J'ai justement écrit ce week-end un billet sur le sujet titré La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Oui c'est ça, la code s'arrête sur quelle ligne?
    Il n'y a pas besoin d'activer les références avec ce type d'écriture.
    Rebonjour,

    Le code s'arrête sur wdGoToBookmark:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set wrdApp = CreateObject("Word.Application")
    Set wrdDoc = wrdApp.Documents.Open(Wchemin)
    
    wrdApp.Selection.GoTo What:=wdGoToBookmark, Name:="FUSSPECIAL"
    'coller au signet
    wrdApp.Selection.PasteSpecial DataType:=wdPasteText
    Merci pour votre aide

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Et oui logique puisque c'est une constante et que la déclaration de cette constante est faite dans les références.

    Deux solutions,
    tu remplaces le nom de constante par sa valeur.
    Tu dois aussi pouvoir en utilisant la méthode donnée par Philippe, déclarer ce nom de constante (avec la valeur associée) dans le cas ou IsLateBinding est true

    [Edit]
    @Philippe : ça pourrait être intéressant de traiter ce cas dans ton billet peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      ' Compilation conditionnelle 
      #If IsLateBinding Then
          Dim appWrd As Object
          Dim wrdDoc As Object
          Set appWrd = CreateObject("Word.Application")
          Const wdGoToBookmark = -1
       #Else
          ' Phase de test
          ' Nécessite le référencemant de Microsoft Word xx.n Object Library
          Dim appWrd As Word.Application
          Dim wrdDoc As Word.Document
          Set appWrd = New Word.Application
          MsgBox "Phase de test EarlyBinding"
      #End If
    Non testé
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est tout à fait normal, les constantes préfixées wd sont des constantes Word non reconnues si on utilise le LateBinding
    Tu dois les déclarer et leurs assigner une valeur lorsque tu utilises le LateBinding

    SI tu as lu le billet que j'ai référencé dans ma première réponse, voici une exemple ci-dessous (à placer en tête de module)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #If IsLateBinding Then
     Const wdGoToBookmark = -1
    #End If
    [EDIT]
    Désolé Qwaz, j'étais en train de rédiger ma réponse et n'ai vu la tienne qu'après avoir l'avoir envoyée

    @Philippe : ça pourrait être intéressant de traiter ce cas dans ton billet peut-être
    Oui, je vais l'ajouter.dans l'après-midi
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-2016] Créer une liste à partir d'une colonne excel pour l'utiliser dans un code VBA
    Par Lubinovitch dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/03/2019, 14h50
  2. Erreur gestion excel via code VBA dans access pour importation
    Par blacklolou dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/01/2013, 10h24
  3. [AC-2003] transfert excel vers access en utilisant du code vba dans access
    Par esisa1 dans le forum Access
    Réponses: 1
    Dernier message: 06/05/2010, 15h04
  4. Accés au donnés sur Excel via Code vba Access
    Par sakia dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/11/2007, 16h46
  5. Problème de version excel sous matlab
    Par mariono dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/07/2007, 12h08

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