Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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
|
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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 |
|
|
Re: Excel VBA Compilation conditionnelle | ||
---|---|---|
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. Cela fonctionne sur XP/Office 2007 et Windows8/Office 2013. Par contre, Il faut environ 2 secondes pour que le calendrier s'affiche. 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 |
|
|