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 :

activer des références via vba [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut activer des références via vba
    Bonjour à tous,

    Je suis confronter à un nouveau problème:


    j'ai un classeur Excel qui à besoin des références Word.

    Le problème c'est qu'il peut etre ouvert sur Excel 2010 ou Excel 2003.

    En fait c'est pour mon entreprise qui possède des ordinateur normaux avec des réseau dessus. Si on utilise Excel, c'est Excel 2010
    Et des ordinateur dit TL (Terminaux Légers) qui ne possèdent pas de disque dur, cela va directemetn sur le réseau et tout s'ouvre avec 2003.


    Du coup j'ai la référence Microsoft Word 14.0 sur Excel 2010 et Microsoft Word 9.0

    Le problème c'est que lorsque je suis sur un TL, il n'arrive pas à activer la référence que je veux. Il dit qu'il ne la trouve pas... Elle est censée etre dans M:\program Files\Microsoft Office\Office\MSWORD9.OLE (c'est le chemin qui est marqué lorsque j'ai activé la référence) sauf que M:\program Files\Microsoft Office\Office\MSWORD9.OLE n'existe pas quand j'essaye de l'ouvrir. Ca doit être le disque dur de l'ordi qui n'existe pas... Y a -t-il un moyen de contourner le problème?

    Autre problème si je n'active pas la référence Office 14.0 sur 2010 enregistre et ouvre via le TL, la référence Microsoft Office 9.0 n'apparait pas dans la liste des références...

    en gros:
    sous 2010: référence présente: uniquement microsoft word 14.0 chemin: C:\program Files\Microsoft Office\Office14\MSWORD.OL
    sous TL: référence présente: uniquement microsoft word 9.0 chemin: M:\program Files\Microsoft Office\Office\MSWORD9.OLE

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Val(Application.Version) < 12 Then
        'Si version d'Excel via TL
    If Not ReferenceActive("Word") Then ActiverReference "MSWORD9.OLE" 'j'ai aussi essayé avec le chemin complet M:\program Files\Microsoft Office\Office\MSWORD9.OLE
    Else
        'Si version d'Excel égale à 2007 ou supérieure
    If Not ReferenceActive("Word") Then ActiverReference "MSWORD.OL" 
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ActiverReference(NomComplet As String)
        ThisWorkbook.VBProject.References.AddFromFile NomComplet
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReferenceActive(Nom As String) As Boolean
        Dim i As Integer
        Dim NbreRef As Integer
     
        NbreRef = ThisWorkbook.VBProject.References.Count
     
        For i = 1 To NbreRef
            If ThisWorkbook.VBProject.References(i).Name = Nom Then
                ReferenceActive = True
                Exit Function
            End If
        Next i
    End Function

    Merci de votre aide
    Merci de cliquer sur pour chaque message vous ayant aidé
    puis sur pour clore cette discussion …

    C'est en récoltant les cailloux qu'on te jette que tu construiras ta future estrade...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    oublis les références, supprime les de ton projet!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Wrd as object
    set Wrd=createObject("Word.application")

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, un tutoriel sur la chose : Early ou Late Binding

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    bien dit duruot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Wrd as object
    set Wrd=createObject("Word.application")
    our info l'object créé utilisera les references du pc sur le quel le fichier est utilisé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    Bonjour à vous tous,

    Merci, en effet c'était tout con... juste à déclarer en objet..

    Merci à tous

    merci pour le tuto. ca pourra toujours servir au cas ou
    Merci de cliquer sur pour chaque message vous ayant aidé
    puis sur pour clore cette discussion …

    C'est en récoltant les cailloux qu'on te jette que tu construiras ta future estrade...

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je me permets de ressusciter cette discussion car je suis confronté à cette problématique et n'arrive pas à m'en sortir.
    Pour le contexte : je dois créer un code pour récupérer des données et variables sur des feuilles excel afin de les mettre en forme dans Word. Ce fichier devant être utilisé par des personnes non expérimentées qui auront des versions différentes potentiel d'OS et/ou de WORD, je compte réaliser mon programme en LATE BINDING et ainsi leur éviter l'activation de la référence Microsoft Office Word xx.x library ...

    Cependant, impossible pour moi d'exploiter pleinement mon code que j'avais précédemment réalisé en EARLY BINDING (qui fonctionne bien), je me retrouve avec des erreurs.

    Voici un essai où je déclare l'objet Word, ouvre un document et écrit 2 phrases et met en gras (qui génère une erreur au niveau du texte en rouge avec commentaire):

    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
    option Explicite
     
    Sub testLateBinding()
     
    Dim WordApp As Object
     
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    WordApp.documents.Add
     
    With WordApp.Selection
    .typetext Text:="LATE BINDING"
    .typeparagraph
    .typetext Text:="CA FONCTIONNE ?"
    End With
     
    WordApp.Paragraph(1).Range.Select 'Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet.
    WordApp.Selection.Font.Bold = True
     
    Set WordApp = Nothing
     
    End Sub
    En reprenant exemple sur l'EARLY BINDING, j'ai ajouté un objet WordDoc = WordApp.Documents.App afin que le programme execute le code dans l'objet "document" et non "word" directement :
    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
    Option Explicit
    Sub testLateBinding()
     
        Dim WordApp As Object
        Dim WordDoc As Object
     
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
        Set WordDoc = WordApp.documents.Add
     
    With WordApp.Selection
    .typetext Text:="LATE BINDING"
    .typeparagraph
    .typetext Text:="CA FONCTIONNE ?"
    End With
     
    WordDoc.Paragraph(1).Range.Select 'Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet.
    WordApp.Selection.Font.Bold = True
     
    Set WordApp = Nothing
     
    End Sub
    Je me retrouve avec la même erreur au même endroit. Ce soucis m'arrive aussi avec la méthode Styles.Add ("TitreA") .... WordApp.Styles("TitreA").Font.Bold = True.

    Mes questions sont donc :
    Est-ce que je me trompe sur la déclaration des Objets ? Sur l'utilisation de l'objet ? Ou est-ce que le LATE BINDING ne prend pas ces méthodes en charge?
    Si je dois utiliser d'autres méthodes, y a-t-il un référencement de ces méthodes que je puisse avancer avec les méthodes compatibles?

    Je vous remercie par avance pour votre retour car cela fait 1 semaine que je fais des essais et cherche une solution sur le net.

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour Adrien,

    Écrit et teste ton code en early binding pour bénéficier de l'intellisense, puis transforme le en late binding.
    Exemple :
    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
    Option Explicit
    Sub testLateBinding()
    'Dim WordApp As Word.Application
    'Dim WordDoc As Word.Document
    '  Set WordApp = New Word.Application
    Dim WordApp As Object
    Dim WordDoc As Object
      Set WordApp = CreateObject("Word.Application")
      WordApp.Visible = True
      Set WordDoc = WordApp.documents.Add
      With WordDoc.Content
        .Text = "LATE BINDING"
      End With
      Set WordApp = Nothing
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  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
    12 767
    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 : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour compléter la réponse de Patrice et s'affranchir des apostrophes, on peut utiliser la compilation conditionnelle
    En tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #Const IsLateBinding = True
    Dans une procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     #If IsLateBinding Then
         Dim appWrd As Object
         Dim wrdDoc As Object
         Set appWrd = CreateObject("Word.Application")
      #Else
         Dim appWrd As Word.Application
         Dim wrdDoc As Word.Document
         Set appWrd = New Word.Application
     #End If
    Ainsi pendant le développement on donne comme valeur False à la constante IsLateBinding après avoir référencé Microsoft Word xx.n Object library ce qui permet de bénéficier de l'intellisense et dès que les tests sont concluant, il suffit de mettre comme valeur True à la constante et décocher la référence à la librairie Word.
    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

  9. #9
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos retours !!!

    Effectivement dans mon test il y a des erreurs de ma part et j'en suis navré car je n'ai donc pas fait sortir les bonnes erreurs.. Cependant comme expliqué dans mon premier message, mon programme a précédemment été réalisé en EARLY BINDING et fonctionne. Quand je le passe en LATE BINDING, je me retrouve avec des erreurs (voir code en dessous). Je pensais donc avoir mal déclaré mes Objets. Cependant après vos retours je m’aperçois que le code bloque quand je vais chercher une donnée sur mon classeur excel.

    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
    Sub testLateBinding()
     
    Dim WordApp As Object
    Dim WordDoc As Object
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Add
     
        'Dim WordApp As Word.Application
        'Dim WordDoc As Word.Document
     
       ' Set WordApp = CreateObject("Word.Application")
        'WordApp.Visible = True
       'Set WordDoc = WordApp.Documents.Add
     
    With WordApp.Selection
    .typetext Text:="LATE BINDING"
    .typeparagraph
    .typetext Text:=Feuil1.Range("A1") 'Erreur d'exécution '13' Incompatibilité de type
    End With
     
    WordDoc.Styles.Add ("Titre A")
    With WordDoc.Styles("Titre A").Font
        .Bold = True
         .Italic = False
         .ColorIndex = wdBlack
         .Name = "Arial"
         .Size = 14
    End With
     
    'Mise en forme
        WordDoc.Paragraphs(1).Range.Select
        WordApp.Selection.Style = WordDoc.Styles("Titre A")
     
    Set WordApp = Nothing
     
    End Sub
    J'ai bien fait le test en EARLY BINDING en activant manuellement la référence, j'ai aucune erreur. Ensuite je désactive la référence et passe en LATE BINDING et je suis bloqué. J'ai aussi testé en reprenant le chemin complet du classeur soit : .typetext Text:=ThisWorkbook.Worksheets("Feuil1").Range("A1"), cela fonctionne en EARLY BINDING mais pas en LATE BINDING.

    Encore merci pour vos précédents commentaires qui vont me permettre d'éviter les erreurs et vous remerciant par avance de m'éclairer sur ce nouveau sujet ?

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    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 : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ajoute la propriété Value à l'objet Range, cela devrait aller mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .typetext Text:=Feuil1.Range("A1").Value
    Cependant en LateBinding, tu vas avoir une autre erreur à la ligne ci-dessous car évidemment dans ce mode, le programme ne peut connaître les constantes préfixées wd
    Voir la discussion sur ce sujet, titrée Enumérer les constantes Office pour les utiliser en LATEBINDING
    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

  11. #11
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci à vous Patrice et Philippe pour votre aide et réactivité !!!!!! J'ai fait un test avec mon programme : des "const wd "et ".value" sur les "range" = plus d'erreur !!!
    Bonne continuation et à bientôt pour une prochaine question :-p

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

Discussions similaires

  1. [XL-2003] Forcer l'activation des macros via le registre
    Par Manhuuu dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/10/2010, 22h43
  2. [XL-2007] Ajouter des MFC via vba
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/06/2010, 12h00
  3. [XL-2003] activation des contrôles supplémentaires VBA
    Par maboulette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2010, 12h57
  4. Path dynamique des références en VBA
    Par saipas dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/08/2007, 10h48
  5. Taille des colonnes via VBA
    Par mooh91 dans le forum Access
    Réponses: 7
    Dernier message: 15/02/2007, 19h30

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