Plantages macros VBA inexpliqués

Le
robertaudet2007
Bonjour,
Depuis plusieurs année, j'ai mis à disposition des applications Excel s=
ur mon site à l'intention de collègues profs d'EPS.
Je viens d'avoir dernièrement des retours m'indiquant que mes application=
s plantaient.
Ces applications fonctionnent depuis 2007, elles ont donc fonctionné avec=
windows XP, ce qui n'est plus le cas.
Nouveaux correctifs XP qui font que mes lignes VBA ne sont plus interprêt=
ées?
Voici la ligne en question qui bloque la macro:

ActiveSheet.DrawingObjects(Array("Ellipse 16", "Ellipse 17", _
"Ellipse 18", "Ellipse 19", "Ellipse 20", "Ellipse 21")).Select

merci d'avance pour vos informations
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #25854872
Bonjour,

L'objet "DrawingObjets" n'existe plus vraiment (et ça fait déjà un
bon moment bien que je ne peux pas te dire avec précision depuis
quand) dans le langage VBA d'Excel. Il fut et est conservé pour une
raison de compatibilité avec les anciennes versions.

Tu peux constater cela par toi-même. Dans la fenêtre de l'éditeur de
code, tu ouvres l'explorateur d'objets (raccourci clavier F2) et fais une
recherche avec "DrawingObjects". Cet objet n'existe plus dans le sens
ou toi tu l'as utilisé. Cependant, si dans le grand carré du bas de la
fenêtre à droite, tu fais un clic droit, dans le menu contextuel, choisis
la commande "Afficher les membres masqués" et là, tu vas le retrouver.
Ceci étant dit, cet objet rend encore de fiers services....

Plus particulièrement, pour la ligne de code que tu as donnée,
ActiveSheet.DrawingObjects(Array("Ellipse 16", "Ellipse 17", _
"Ellipse 18", "Ellipse 19", "Ellipse 20", "Ellipse 21")).Select

Ma version Excel 2010 plante lors de l'exécution (Excel se ferme).
Si j'enlève un élément de la liste de la matrice, le code s'exécute
correctement.
En modifiant l'appellation des objets pour "E 16", "E17"....
La ligne s'exécute normalement. Il en va de même si j'utilise l'index
au lieu des noms des objets
ActiveSheet.DrawingObjects(Array(1, 2, 3, 4, 5, 6)).Select

Quant à la raison pour laquelle cela ne fonctionne pas avec les noms
d’objets, la longueur de la chaîne de caractère dans la matrice semble
jour un rôle...par exemple ce code avec 10 objets s'exécute correctement
ActiveSheet.DrawingObjects(Array("E 16", "E 17", "E 18", _
"E 19", "E 20", "E 21", "E 22", "E 23", "E 24", "E 25")).Select


Cependant, je ne connais pas LA cause de ta problématique et l'aide sur
cet objet n'est pas abondante sur le sujet. Serait-ce simplement un bogue?

Personnellement, je la remplacerais par ceci :
ActiveSheet.Shapes.Range(Array("Ellipse 16", "Ellipse 17", _
"Ellipse 18", "Ellipse 19", "Ellipse 20", "Ellipse 21")).Select


MichD
---------------------------------------------------------------
robertaudet2007
Le #25857972
Le lundi 9 décembre 2013 15:23:02 UTC+1, MichD a écrit :
Bonjour, L'objet "DrawingObjets" n'existe plus vraiment (et ça fait d éjà un bon moment bien que je ne peux pas te dire avec précision depu is quand) dans le langage VBA d'Excel. Il fut et est conservé pour une ra ison de compatibilité avec les anciennes versions. Tu peux constater cela par toi-même. Dans la fenêtre de l'éditeur de code, tu ouvres l'expl orateur d'objets (raccourci clavier F2) et fais une recherche avec "Drawing Objects". Cet objet n'existe plus dans le sens ou toi tu l'as utilisé. Ce pendant, si dans le grand carré du bas de la fenêtre à droite, tu fai s un clic droit, dans le menu contextuel, choisis la commande "Afficher les membres masqués" et là, tu vas le retrouver. Ceci étant dit, cet obj et rend encore de fiers services.... Plus particulièrement, pour la ligne de code que tu as donnée, ActiveSheet.DrawingObjects(Array("Ellipse 16", "Ellipse 17", _ "Ellipse 18", "Ellipse 19", "Ellipse 20", "Ellipse 21")).S elect Ma version Excel 2010 plante lors de l'exécution (Excel se ferme). Si j'enlève un élément de la liste de la matrice, le code s'exécute correctement. En modifiant l'appellation des objets pour "E 16", "E17".... La ligne s'exécute normalement. Il en va de même si j'utilise l'index au lieu des noms des objets ActiveSheet.DrawingObjects(Array(1, 2, 3, 4, 5, 6)).Select Quant à la raison pour laquelle cela ne fonctionne pas avec l es noms d’objets, la longueur de la chaîne de caractère dans la matri ce semble jour un rôle...par exemple ce code avec 10 objets s'exécute c orrectement ActiveSheet.DrawingObjects(Array("E 16", "E 17", "E 18", _ "E 1 9", "E 20", "E 21", "E 22", "E 23", "E 24", "E 25")).Select Cependant, je n e connais pas LA cause de ta problématique et l'aide sur cet objet n'est pas abondante sur le sujet. Serait-ce simplement un bogue? Personnellement, je la remplacerais par ceci : ActiveSheet.Shapes.Range(Array("Ellipse 16", "Ellipse 17", _ "Ellipse 18", "Ellipse 19", "Ellipse 20", "Ellipse 21")).S elect MichD ---------------------------------------------------------------



Bonjour,
Merci beaucoup pour le temps pris pour cette réponse. Je vais essayer de tester tes différentes suggestions.
J'ai pu remettre en route mon application en "omettant" l'application d'une couleur sur mes ellipses. J'ai constaté tout d'abord en recréant une m acro que VBA utilisait maintenant "Oval" . Mais j'ai surtout constaté qu' en dessinant un cercle ou une ellipse, et en créant une macro pour change r sa couleur, VBA ne "L'ENREGISTRAIT PAS" . Est-ce un bug ? cela est quand même bizarre que l'on ne puisse effectuer cette manip.
Encore merci. Si je découvre le "pot aux roses", je ne manquerais pas de le publier sur ce post.
Publicité
Poster une réponse
Anonyme