Problème vba compatibilité entre Excel 2010 et 2003
Résolu
L28
Messages postés
159
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour!
J'ai (encore) un soucis sous excel ou plutôt la programmation Vba. De ce fait je crée mon quatrième (et j'espère dernier) topic pour cet exercice/microprogramme.
Bon d'un coté 4 questions pour 11 modules, un Userform et surtout un débutant qui découvre le vba sur le tas je pense que je suis excusable ^^.
Cette fois-ci mon problème est issu d'un manque de compatibilité entre excel 2010 et le 2003. je vous explique:
Dans mon usine à gaz, j'ai découvert que l'utilisation de certains événements tels que le Change, rendaient les boutons (annuler/répéter) inutilisables...
J'ai donc créé une méthode undo assez... simple qui stocke, pour chaque cellule d'une certaine plage, les données précédemment entrées.
Tout cela fonctionne sauf que pour le "Design" j'ai rajouté un compteur dans un rectangle pour montrer le nombre de "undo" encore disponibles.
Et là j'ai une erreur que je ne comprend pas:
"Impossible de définir la propriété Text de la classe Characters"
Cela pourrait être compréhensible si la même commande utilisé 20 lignes plus haut ne fonctionnait pas non plus... Or pour augmenter la valeur du compteur ma formule fonctionne, mais pour la réduire non...
Voici mon code, cela pourra peut être aider aussi certains...
*modifauto: lorsque certaines macro s'exécutent, cela permet de limiter le nombre de commande à exécuter pour les événements change ou sélection change avec un
If Not ModifAuto
POur la première fonction la commande
n'a pas de soucis.
mais pour la deuxième si. Et cela uniquement sur Excel 2003
Un grand Merci d'avance et une bonne journée!
J'ai (encore) un soucis sous excel ou plutôt la programmation Vba. De ce fait je crée mon quatrième (et j'espère dernier) topic pour cet exercice/microprogramme.
Bon d'un coté 4 questions pour 11 modules, un Userform et surtout un débutant qui découvre le vba sur le tas je pense que je suis excusable ^^.
Cette fois-ci mon problème est issu d'un manque de compatibilité entre excel 2010 et le 2003. je vous explique:
Dans mon usine à gaz, j'ai découvert que l'utilisation de certains événements tels que le Change, rendaient les boutons (annuler/répéter) inutilisables...
J'ai donc créé une méthode undo assez... simple qui stocke, pour chaque cellule d'une certaine plage, les données précédemment entrées.
Tout cela fonctionne sauf que pour le "Design" j'ai rajouté un compteur dans un rectangle pour montrer le nombre de "undo" encore disponibles.
Et là j'ai une erreur que je ne comprend pas:
"Impossible de définir la propriété Text de la classe Characters"
Feuil1.Shapes("IndUndo").TextFrame.Characters.Text = ComptUndo
Cela pourrait être compréhensible si la même commande utilisé 20 lignes plus haut ne fonctionnait pas non plus... Or pour augmenter la valeur du compteur ma formule fonctionne, mais pour la réduire non...
Voici mon code, cela pourra peut être aider aussi certains...
Public Sauv(7, 19, 10) As String, ModifAuto As Boolean, ListeUndo(19) As String, ComptUndo As Integer Sub SauvAction(Cellule As Range) If Cellule.Rows.Count = 1 And Cellule.Columns.Count = 1 Then Ligne = Cellule.Row - 27 Colonne = Cellule.Column - 31 If Ligne >= 0 And Colonne >= 0 Then If Sauv(Colonne, Ligne, 0) <> "" Then For i = 0 To 9 Sauv(Colonne, Ligne, 10 - i) = Sauv(Colonne, Ligne, 9 - i) Next i End If Sauv(Colonne, Ligne, 0) = Cellule.Value If ListeUndo(0) <> "" Then For i = 0 To 18 ListeUndo(19 - i) = ListeUndo(18 - i) Next i End If ListeUndo(0) = Cellule.Address ComptUndo = ComptUndo + 1 End If Else ComptUndo = 0 Erase Sauv Erase ListeUndo End If Feuil1.Shapes("IndUndo").TextFrame.Characters.Text = ComptUndo End Sub -------------------------------------------------------------------------------------------------- Sub Undo() If ListeUndo(0) <> "" Then ModifAuto = True Ligne = Range(ListeUndo(0)).Row - 27 Colonne = Range(ListeUndo(0)).Column - 31 Range(ListeUndo(0)) = Sauv(Colonne, Ligne, 1) For i = 0 To 9 Sauv(Colonne, Ligne, i) = Sauv(Colonne, Ligne, i + 1) Next i For i = 0 To 18 ListeUndo(i) = ListeUndo(i + 1) Next i ModifAuto = False ComptUndo = ComptUndo - 1 End If Feuil1.Shapes("IndUndo").TextFrame.Characters.Text = ComptUndo End Sub
*modifauto: lorsque certaines macro s'exécutent, cela permet de limiter le nombre de commande à exécuter pour les événements change ou sélection change avec un
If Not ModifAuto
POur la première fonction la commande
Feuil1.Shapes("IndUndo").TextFrame.Characters.Text = ComptUndo
n'a pas de soucis.
mais pour la deuxième si. Et cela uniquement sur Excel 2003
Un grand Merci d'avance et une bonne journée!
A voir également:
- Problème vba compatibilité entre Excel 2010 et 2003
- Word et excel gratuit - Guide
- Compatibilite windows 11 - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Déplacer colonne excel - Guide
3 réponses
Bonjour,
Il est difficile de te répondre sans le classeur et sans la totalité du code, mais il ne s'agit probablement pas d'un problème de compatibilité 2003 / 2007 mais plutôt d'un écriture ambigüe interprétée différemment .
Met ton fichier (ou un exemple publiable) sur https://www.cjoint.com/
Conseil pour les débutants (et les autres) : toujours débuter chaque module par :
et dans le cas de variables publiques, ajouter :
Remarque : le fait de déclarer des variables publiques ne permet pas de conserver leur valeur lorsque l'exécution des macros se termine : je ne vois pas l'intérêt de ComptUndo s'il n'est pas initialisé à partir d'une donnée mémorisée.
Patrice
Il est difficile de te répondre sans le classeur et sans la totalité du code, mais il ne s'agit probablement pas d'un problème de compatibilité 2003 / 2007 mais plutôt d'un écriture ambigüe interprétée différemment .
Met ton fichier (ou un exemple publiable) sur https://www.cjoint.com/
Conseil pour les débutants (et les autres) : toujours débuter chaque module par :
Option Explicitça oblige à déclarer toutes les variables et ça évite toute ambigüité.
et dans le cas de variables publiques, ajouter :
Option Private Modulepour éviter d'éventuelles interférences avec d'autres projets (ou des macros complémentaires) dans lesquels une variable pourrait avoir le même nom.
Remarque : le fait de déclarer des variables publiques ne permet pas de conserver leur valeur lorsque l'exécution des macros se termine : je ne vois pas l'intérêt de ComptUndo s'il n'est pas initialisé à partir d'une donnée mémorisée.
Patrice
Bonjour Patrice33740,
Merci pour ta réponse! Je suis actuellement en train d'effectuer les modifications que tu me conseilles et je trouve quelques erreurs assez "drôles" comme par exemple le xlcontinuous qui devient x1continuous en raison d'une mauxaise interprétation.
Aussi l'utilisation de Err en tant que variable perso alors que Err existe déjà dans excel ... bref quelques petites erreurs.
Sinon je n'ai pas "bien" compris ta remarque concernant la déclaration publique et cela m'effraie car j'utilise quelques variables déclarées en publiques dont:
- Version: Integer contenant la version du logiciel (10,12,14..) permettant de déterminer quelles fonctions utiliser en fonction de Excel 2003 ou 2007 (cela me permet de faire tourner le programme actuellement en désactivant le compteur Undo)
- Et quelques autres variables telles que ModifAuto: booléen qui indique si la modification au classeur est d'origine utilisateur ou macro (permet de diminuer les opérations)
Je n'ai pas rencontré de soucis pour leurs mises en place, le comptUndo s'incrémente et se réduit bien de même pour les tableaux de sauvegarde. Sauf si bien sur il y a une erreur et que je réinitialise le projet.
Sinon J'ai essayé d'utiliser le compteur dans un classeur vide et cela fonctionne donc effectivement ce n'est pas un problème de compatibilité...
Au final (j'ai créé ce post en même temps que je corrigeais le code), l'erreur vient d'un problème de protection de la feuille.
En effet j'avais protégé la feuille avec Protect et UserinterfaceOnly.
Pour Sauvaction juste avant de l'appeler je faisais un unprotect et pas pour undo. Je pense que Sur 2007 les macro ont accès aux objets alors que sur 2003 même avec UserinterfaceOnly elles n'ont accès qu'au tableau...
Après ce ne sont que des suppositions.
Encore merci pour ton aide!
Merci pour ta réponse! Je suis actuellement en train d'effectuer les modifications que tu me conseilles et je trouve quelques erreurs assez "drôles" comme par exemple le xlcontinuous qui devient x1continuous en raison d'une mauxaise interprétation.
Aussi l'utilisation de Err en tant que variable perso alors que Err existe déjà dans excel ... bref quelques petites erreurs.
Sinon je n'ai pas "bien" compris ta remarque concernant la déclaration publique et cela m'effraie car j'utilise quelques variables déclarées en publiques dont:
- Version: Integer contenant la version du logiciel (10,12,14..) permettant de déterminer quelles fonctions utiliser en fonction de Excel 2003 ou 2007 (cela me permet de faire tourner le programme actuellement en désactivant le compteur Undo)
- Et quelques autres variables telles que ModifAuto: booléen qui indique si la modification au classeur est d'origine utilisateur ou macro (permet de diminuer les opérations)
Je n'ai pas rencontré de soucis pour leurs mises en place, le comptUndo s'incrémente et se réduit bien de même pour les tableaux de sauvegarde. Sauf si bien sur il y a une erreur et que je réinitialise le projet.
Sinon J'ai essayé d'utiliser le compteur dans un classeur vide et cela fonctionne donc effectivement ce n'est pas un problème de compatibilité...
Au final (j'ai créé ce post en même temps que je corrigeais le code), l'erreur vient d'un problème de protection de la feuille.
En effet j'avais protégé la feuille avec Protect et UserinterfaceOnly.
Pour Sauvaction juste avant de l'appeler je faisais un unprotect et pas pour undo. Je pense que Sur 2007 les macro ont accès aux objets alors que sur 2003 même avec UserinterfaceOnly elles n'ont accès qu'au tableau...
Après ce ne sont que des suppositions.
Encore merci pour ton aide!
Bonjour tout le monde !
eh ben moi j'ai un trés serieux probleme !!
j'ai créer un fichier avec plein de macros sous excel 2007 , ce fichier marhce parfaitement sous excel 2010 mais avec 2007 ça plante aprés 10-15 min!!
Pourquoi ? comment ? c'est un probleme qui date de plus que 2 mois , j'ai fais bcp de recherche sur internet sans trouver la solution :(
J'attends vos solutions avec impatience !!
GRAND MERCI
eh ben moi j'ai un trés serieux probleme !!
j'ai créer un fichier avec plein de macros sous excel 2007 , ce fichier marhce parfaitement sous excel 2010 mais avec 2007 ça plante aprés 10-15 min!!
Pourquoi ? comment ? c'est un probleme qui date de plus que 2 mois , j'ai fais bcp de recherche sur internet sans trouver la solution :(
J'attends vos solutions avec impatience !!
GRAND MERCI
Normal : Les ingénieurs s'efforcent de garantir une compatibilité ascendante (de 2007 vers 2010), et y parviennent quasiment à 100%.
Mais il faut se rappeler que la compatibilité descendante (de 2010 vers 2007 par exemple) n'est jamais envisagée, surtout en matière de macros.
Donc pas de solution, sauf à ré-écrire tes macros sous Excel 2007 ...
Mais il faut se rappeler que la compatibilité descendante (de 2010 vers 2007 par exemple) n'est jamais envisagée, surtout en matière de macros.
Donc pas de solution, sauf à ré-écrire tes macros sous Excel 2007 ...
Bonjour ameddo79
Ma boule de cristal n'est pas suffisamment puissante pour me permettre d'examiner ton code en détail !!!
Mais il est quasiment certain que si tu mets ton fichier sur c-joint nous aurons une vision beaucoup plus nette ...
.. à moins que la botte de paille ne soit trop grosse.
Patrice
Ma boule de cristal n'est pas suffisamment puissante pour me permettre d'examiner ton code en détail !!!
Mais il est quasiment certain que si tu mets ton fichier sur c-joint nous aurons une vision beaucoup plus nette ...
.. à moins que la botte de paille ne soit trop grosse.
Patrice