[VBA-WORD] Chargement de module

Signaler
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007
-
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007
-
Bonjour un tous.

J'ai un petit probleme qui nécessite votre aide.

J'utilise des macro dans word pour generer automatiquement des documentations concernant des clients. Pour cela je doit recuperer des tableaux dans Excell. Mon application doit pouvoir fonctionner sous Office 2000 ET Office 2003.
Voila mon probleme.
Lors de la recopie du tableau Excel dans le document word par la methode selection.paste, une erreur survien parfois avec Office 2003 ( tableau copier mais impossible a mettre en page, la mise en page etant automatiser l'application plante). Pour repondre a ce probleme j'ai donc utiliser la methode selection.PasteExcelTable. Cependant cette methode n'est pas disponible sous  Office 2000 et il m'es donc impossible de l'utiliser.
Pour repondre a ce probleme j'ai tenter la methode suivante :

If Application.Version = "11.0" Then    'Si office 2003
                        Documents(Name_Doc).Application.Selection.PasteExcelTable False, False, True
                    Else
                        Documents(Name_Doc).Application.Selection.Paste
                    End If

Ceci ne fonctionne pas car sous windows 2000 surviens une erreur de compilation dans le module ( normal car il ne connais pas le code PasteExcelTable!!!

Je pensais cree deux module specifique , un pour Office 2000 et l'autre pour 2003 et charger le bon selon la version de Office utiliser, cependant je ne vois pas du tout comment faire.

SI vous avez une solution...

 

11 réponses

Messages postés
177
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
16 octobre 2012

Le problème n'est pas là à mon avis. Parce que tu as mis une condition, si l'application n'est pas la version 11, il ne lit donc pas le .PasteExcelTable. Il passe plutôt au Else.

Peux-tu nous dire quelle est l'erreur exacte qu'il te donne?

 Maroxye
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Il me met : Erreur de compilation dans le module1.
Quand j'enleve seulement cette ligne je n'est plus du tout le probleme.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Salut, une autre solution consisterait a faire des compilations conditionnelles. Une pour 2000 et l'autre pour 2003.
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Cette solution pourrais en effet etre la bonne mais pourrais tu m'expliquer comment cela fonctionne?
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Va voir dans ton aide avec #if ou #ifdef car je ne connais pas moi meme en VB.net
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Merci j'ai fait la modif avec l'aide trouver sur le site : http://www.vbfrance.com/tutoriaux/COMPILATION-CONDITIONNELLE-VB6_612.aspx

et sa fonctionne.

Voiçi mon code pour ceux que cela interesse :

#Const Office2003 = False

....

If Application.Version = "11.0" Then    'Si office 2003
        Office2003 = True
End If

....

Sub Paste_Excel_Tab()
   
    #If Office2003 Then
        Documents(Name_Doc).Application.Selection.PasteExcelTable False, False, True
    #Else
        Documents(Name_Doc).Application.Selection.Paste
    #End If
   
End Sub
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Rectification cela ne fonctionne pas.

En effet la compilation conditionnel se fait avant l'execution. Il faudrait donc que je specifie par une ligne de commande la version de Office ne pouvans pas modifie une constante lors de l'execution.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Exacte, je suis pas sur mais il me semble que cela est parametre dans ton IDE. Regarde dans les options ou dans les autres menus mais n'ayant pas VB6 devant moi, je peux pas dire.

Sinon, tu n'as qu'a passer par  un inputbox (j'espere que ca existe aussi en VB6). C'est une boite de dialogue qui permet de rentrer une chaine de caractères
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Je suis d'accord sur le principe mais etant donnée qu'il s'agit d'une constante meme une input box n'y changera rien vu qu'on ne peut pas la modifier.
Je suis entrain de chercher dans les constantes predefinies de Office peut etre je trouverai mon bonheur.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Mais tu es obliger de passer par une constante ?
Messages postés
14
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 mai 2007

Pour faire la compilation conditionelle oui il n'y a pas d'autre solution.

Sinon la j'ai trouver une autre piste.
Je vais m'inspirer de ce code la :

http://frederic.sigonneau.free.fr/code/VBE/CompilationConditionnelle.txt

et je vais redefinir ma fonction PasteExcelTab pour Office2000.

Cependant je ne trouve pas comment utiliser la reference a Office2003 comme il le fait lui avec VBA6