Compatibilité macros

Bonjour, j'ai développé sous Excel 2007 en VBA une application , enregistrée en mode compatibilité Excel 97_2003 en .xls (certains utilisateurs étaient encore sous cette version de Excel). Depuis nombre d'entre eux ont migré vers Office 2013 voire Office 2016. J'ai de plus en plus de retours me signalant des dysfonctionnements avec ces nouvelles versions. Enregistrer en .xlsm ne fait qu'aggraver le mal! Quelqu'un pourrait -il me dire si il y a possibilité de rendre compatible mon application avec ces nouvelles versions? Comment faire?

Dans l'optique d'acquérir une version Office 2019, peut-on copier-coller l'application et l'enregistrer au nouveau format? Fonctionnement garanti??

Faudra t-il redévelopper le tout avec la nouvelle version ? ( heures de travail en vue)

En exportant les Userform (certains comportent du code) et les modules de codes pour les intégrer à la nouvelle version, le fonctionnement irréprochable sera t-il assuré? La syntaxe sera t-elle compatible avec la nouvelle version? Si quelqu'un a une piste, j'en serai ravi. Merci par avance, CAP

Bonjour,

en théorie c'est 100% compatible, en pratique il y a des bugs avec l'arrivée de l'interface SDI en lieu et place de l'interface MDI avec 2013.

Le plus souvent c'est ici que ça pêche...

Concept :

https://docs.microsoft.com/fr-fr/office/vba/excel/concepts/programming-for-the-single-document-interface-in-excel?redirectedfrom=MSDN

Je te livre les quelques liens que j'ai noté avec description du bug et parfois comment le passer :

https://stackoverflow.com/questions/18726141/excel-2013-worksheet-activate

https://support.office.com/en-US/search/results?Lcid=1033&Query=Office+2013+known+issues

Pour partir à propre, à ta place je copierai feuille par feuille les cellules (pas emmener la feuille) dans un classeur .xlsm.

Tu peux faire glisser sans problème les userform d'un projet à l'autre ainsi que les modules standards.

Pour les modules de feuille ou Thisworkbook, copier-coller le code.

N'oublie pas les noms éventuels.

Ensuite penche-toi de près sur les passages où tu as des activations de feuille. Si tu peux t'en passer il vaut mieux ré-écrire cette partie. On croit qu'elle est activée, on la voit activée, mais pas toujours vrai pour vba qui continue à travailler sur l'ancienne ( enfin c'était ça à une époque...).

J'ai même vu un cas où après la macro, l'utilisateur faisait une saisie qui se réalisait en fait sur l'ancienne feuille et non sur la nouvelle active qu'il avait devant les yeux et dans laquelle il saisissait...

Là c'était sur des feuilles masquées qui avaient été affichée par macro et qui n'étaient pas réellement actives. Un truc de fou quoi.

Ensuite crée des nouveaux topics pour chaque pb en le décrivant en détail. Là on est dans le flou le plus total. Avec si possible un classeur réduit qui met en évidence le pb

eric

Bonjour Eric, merci pour ces précisions, je vois que les changements depuis la version 2013 sont conséquents. J'ai parcouru les différents articles proposés par les liens, ceux en anglais sont surement intéressants mais je n'y comprends pas grand chose.

Au sujet de la nouvelle interface, l'utilisateur de mon appli n'est pas amené à ouvrir plusieurs sessions (ou classeurs). Bien sûr il y a différentes feuilles qui sont appelées, activées et masquées par une macro, d'autres restes visibles et accessibles continuellement. De même différents User Forms se succèdent au fur et à mesure des saisies. Faudra-t-il réecrire ces passages et comment?

Les dysfonctionnements les plus courants sont: effacement d'une ligne, inscription en doublon d'une ligne, sélection d'une autre cellule que celle prévue dans la macro, blocage lors d'une demande de copier-coller

( code: Range("A2").Select

selection.copy

Range("B5").Select

Activesheet.Paste (ou Selection. Pastespecial Paste: =xlvalues

Et rarement dans le même module cette instruction étant présente dans plusieurs modules.

. Il y a même eu le cas d'une feuille qui a été renommée de sorte que le processus s'est bloqué puisqu'il ne trouvait plus la feuille demandée.

Question: en reconstruisant mon appli sur une version Office 2019, ces dysfonctionnements seront ils éliminés? Et faudra-t-il modifier la syntaxe de certains processus?

Il faudrait certainement enregistrer en version "compatibilité excel 97-2003" afin que les utilisateurs sous une version antérieure puissent s'en servir, car en format .xlsm la compatibilité n'est pas garantie, et en format .xlsx les macros ainsi que les User Forms sont supprimés!

Voilà ou j'en suis de ma réflexion, je vais un peu temporiser avant de prendre une décision. Merci en tous cas pour toutes ces infos, je continue de creuser.

Bonjour,

tu pourrais commencer par enlever tous les .Select inutiles.

Ne garder que ceux où tu n'as pas le choix.

Par exemple :

Range("A2").Select Selection.Copy Range("B5").Select ActiveSheet.Paste

doit s'écrire :

Range("A2").Copy Range("B5")

en préfixant avec le Sheet à droite et/ou à gauche si ce n'est pas la feuille active.

et pour un Pastespecial c'est :

Range("B5").value=Range("A2").Value

eric

Bonjour Eric, merci pour le tuyau, je ne connaissais pas cette syntaxe (j'ai énormément de choses à apprendre). Je suis d'ailleurs conscient que ma "littérature" est très largement perfectible, mais je ne sais ou trouver la meilleure forme d'écriture.

En tout cas je vais déjà tester et modifier toutes les procédures qui contiennent ce genre d'instruction .

Cela va me prendre un peu de temps. Puis je ferai tester par un utilisateur la nouvelle mouture.

Je te tiendrai au courant de l'évolution de la situation.

Encore merci et bon dimanche, CAP

Bonjour,

n'oublie pas que partout où tu auras pu mettre cette écriture ça ne sera plus utile d'activer ou rendre visibles les feuilles, c'est le but.

eric

Merci Eric, super, cela fait 1 ligne de code au lieu de 4. Je vais simplifier au max mes modules.

Rechercher des sujets similaires à "compatibilite macros"