Excel VBA Compilation conditionnelle
#1
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-08-2013 14h54

Bonjour,

j'ai une application qui fonctionne sur Windows XP / Office 2007.

Cette même application ne fonctionne plus sous Windows 7 / Office 2013, or J'ai besoin de la faire tourner dans les deux environnements.

Le problème est généré lors de la compilation des modules VBA. Je n'arrive pas à installer le module de gestion de calendrier MSCOMCT2.OCX sur Windows7 et je n'ai pas trouvé d'équivalent compatible avec windows 7 sur le net.

Lorsque je supprime dans mon application,  le module .frm  de gestion de calendrier et le code inclus qui y fait appel dans certaines feuilles , l'application se compile correctement et tourne normalement, sous windows7/OFFICE 2013 sans la fonction calendrier.

Afin d'éviter de gérer et de maintenir à jour deux applications, sachant qu'il est possible d'identifier la version d'Office avec le code

Val(Application.version),

existe-t-il une possibilité de compilation conditionnelle des modules VBA?

Cordialement

JMV

Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#2
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 10-08-2013 16h17

Bonjour wjmavsk,

 

La compilation conditionnelle existe bel et bien en VBA.

À première vue je ne crois pas que la solution au problème soulevé soit de ce côté.

 

Pourrais-tu fournir un classeur exemple?

 

Cordialement,

 

Guy


Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#3
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-08-2013 23h01

Bonsoir Guy,

l'application comporte 12 feuilles et pèse 2Mo. Je vais tenter d'en faire un extrait pour l'envoyer.

 

Effectivement la compilation conditionnelle existe dans office 2007. J'arrive à la mettre en oeuvre en définissant une  constante nommée Fversion que j'enregistre dans les propriétés du projet.

Dans le code, je rajoute la condition de version en utilisant les symbole # devant If, Else et end if  pour indiquer que la compilation est conditionnelle. Cela fonctionne , mais je dois changer manuellement la valeur de la constante Fversion.

En lieu et place de la constante Fversion, je voudrais pouvoir utiliser une variable globale dont la valeur dépendrait de la version d'Office utilisée.

Est-ce possible?

Cordialement,

JM

Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#4
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 11-08-2013 00h07

Suite du message précédent:

Guy,

j'ai préparé un fichier qui ne contient qu'une feuille et la macro de gestion du calendrier avec la compilation conditionnelle. Au format XLSB plus zip, ce fichier pèse encore 256Koctets. Je ne sais plus réduire la taillle sans altérer la fonctionnalité. Je n'arrive pas à le charger pour l'envoyer.

Autre option?

JM

Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#5
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 11-08-2013 02h25

Bonsoir wjmavsk,

 

Exceptionnellement joint ton fichier à un courriel perso au guy@2pme.ca et je zieuterai la chose. Je suis surpris que ce classeur pèse autant, il ne s'agit que de gérer la présence du contrôle MSCOMCT2.OCX après tout.

 

Cordialement,

 

Guy


Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#6
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 11-08-2013 11h13

OK, merci. Fichier envoyé.

JM

Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#7
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 11-08-2013 16h58

Bonjour wjmavsk,

 

Une remarque d'abord. Tu n'utilises pas la directive de compilation Option Explicit.

Microsoft a gardé sa manie de ne pas prémunir les codeurs contre l'imprécision (pour dire le moins) dans le montage du code.

 

Habitude à prendre et à garder : dans l'éditeur de code VBA menu Outils/Options.

Dans le formulaire qui apparaît onglet Éditeur, cocher la case Déclaration des variables obligatoire.

 

Enfin, après avoir aperçu ton classeur, je crois que tu devrais utiliser le complément de Didier comme calendrier mdf_XLCalendar.xla. Celui-ci n'utilise pas de contrôle Activex (OCX) mais des contrôles standards.

 

Page de téléchargement http://www.mdf-xlpages.com/modules/TD ... file.php?cid=2&lid=19

 

Cordialement,

 

Guy

 

 


Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#8
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 11-08-2013 18h04

bonjour Guy,

merci pour tes commentaires.

Ok pour l'option Explicit à cabler par défaut.

 

Initialement, j'ai essayé d'utiliser mdf.Calendar créé par D Fourgeot.

Je ne suis pas parvenu à régler les problèmes suivants:

1) Comme tu as pu le voir dans le fichier expédié, le calendrier ne s'affiche que sur certaines colonnes à partir de la ligne 7. Dans mon tableau, il y a d'autres colonnes avec des dates calculées et je ne veux pas que le calendrier s'affiche lorsque le curseur est positionné sur des cellules autres que celles pré-programmées.

2) D'autre part, j'utilise le calendrier en mode non modal. En fait les cellules contiennent initialement une formule qui calcule une date en fonction de la valeur de certains champs. Ce n'est qu'en fin de cycle de vie d'une ligne du tableau que la date réelle de facturation vient écraser cette formule. Pour éviter que l'utilisateur n'écrase la formule par mégarde, il doit d'abord positionner le curseur de la souris sur la cellule et la sélectionner, le calendrier apparait alors à coté de cette cellule. L'utilisateur peut ensuite positionner le curseur  dans le calendrier sur la date à entrer dans la cellule choisie initialement et cliquer pour enregistrer cette date.

 

Avec la solution de Didier, je ne suis pas parvenu à obtenir ce mode de fonctionnement.

Est-ce possible?

Est-ce que la solution de Didier a été expérimentée sur Windows 7 / Office 2013?

 

Cordialement,

JM

Hors Ligne
Rapport   Haut 

Re: Excel VBA Compilation conditionnelle
#9
Aspirant XLPages

Inscription: 05/01/2013

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 23-08-2013 21h14

Bonsoir,

J'ai modifié le code VBA pour que le Mdf-XLCalendar ne s'affiche qu'à partir de la ligne 7, sur les colonnes 11,12 et 14 d'une des feuilles de mon classeur . 

Pour les autres cellules qui contiennent des dates calculées, le calendrier ne s'affiche plus, même en mode auto et je n'ai plus d'erreur même lorsque la cellule est protégée.wink

Cela fonctionne sur XP/Office 2007 et Windows8/Office 2013. smiley

Par contre, Il faut environ 2 secondes pour que le calendrier s'affiche.angry Je ne sais pas si c'est l'algorithme de calcul servant à positionner le calendrier qui entraine ce résultat ou si c'est parce qu'Excel recalcule l'ensemble de la feuille à chaque activation du calendrier.

Avez-vous observé le même résultat sur d'autres applications ?

Y-a-t-il un moyen d'accélérer le processus?

Merci par avance pour votre aide.

JM


Cordialement,
JMV
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes