[VBA-WORD] Chargement de module

billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007 - 14 mai 2007 à 17:38
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007 - 15 mai 2007 à 11:30
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

cs_Maroxye Messages postés 177 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 16 octobre 2012
14 mai 2007 à 22:30
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
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
14 mai 2007 à 22:59
Il me met : Erreur de compilation dans le module1.
Quand j'enleve seulement cette ligne je n'est plus du tout le probleme.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
15 mai 2007 à 08:31
Salut, une autre solution consisterait a faire des compilations conditionnelles. Une pour 2000 et l'autre pour 2003.
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
15 mai 2007 à 09:37
Cette solution pourrais en effet etre la bonne mais pourrais tu m'expliquer comment cela fonctionne?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
15 mai 2007 à 10:21
Va voir dans ton aide avec #if ou #ifdef car je ne connais pas moi meme en VB.net
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
15 mai 2007 à 10:46
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
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
15 mai 2007 à 11:04
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.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
15 mai 2007 à 11:13
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
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
15 mai 2007 à 11:19
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.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
15 mai 2007 à 11:26
Mais tu es obliger de passer par une constante ?
0
billybond Messages postés 14 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 18 mai 2007
15 mai 2007 à 11:30
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
0
Rejoignez-nous