Variable de type Range - Comportement... variable
Bonjour à tous.
J’ai un problème de définition de Variable.
Supposons la routine :
Sub ChangerPourLaMêmeChose()
For Each Cellule In Selection
Cellule.Value = Cellule.Value
Next Cellule
End Sub
Il faut bien sûr définir la Variable Cellule !
Si, en tête de routine, je définis Cellule comme Variable Locale par « Dim Cellule As Range », la routine s’exécute.
Si, en tête du module, je définis Cellule comme Variable Publique par « Public Cellule As Range », la routine s’exécute.
Mais par principe et depuis longtemps... et sans souci particulier,
je définis toutes mes variables en tant que Variables Publiques
dans un module spécifique appelé finement « a_ConstantesEtVariables ».
Donc Cellule est définie dans ce module par « Public Cellule As Range ».
Mais alors l’exécution de la routine est sanctionnée d’une erreur de compilation :
« La variable de contrôle For Each doit être de type Variant ou Object ».
Pas contrarié par une définition de Variable un peu large, dans le module « a_ConstantesEtVariables »
j’ai redéfini Cellule comme Variable Publique du type Variant.
Mais la routine est toujours refusée avec la même erreur de compilation.
Une âme charitable pourra-t-elle me dire quelle ânerie évidente j’ai bien pu commettre pour en arriver là ?
Cordialement
André Blanquer
Bonjour
Il n'y a pas de raison que cela ne fonctionne pas
Merci de m'avoir lu... et aussi vite
Mais pourtant j'ai bien cet effet !
Bien sûr je pallie la chose en redéfinissant Cellule dans la routine
mais ce n'est pas satisfaisant pour l'esprit !
Ah ! J'avais oublié quelque chose :
préférant mes menus personnels qui me mettent à ma disposition
directement et dans une forme concentrée
les commandes et routines qui me conviennent,
je n'ai pas adopté Excel 2007 et plus avec ses [censuré] de rubans encombrants et malpratiques...
Bref : j'utilise Excel 2002.
Probablement pas de lien, mais sait-on jamais ?
En tout cas, merci de ta réponse.
Cordialement
André Blanquer
Bonjour le fil
Comme Banzai64 que je salue
j'ai testé et cela fonctionne parfaitement sur 2003 et 2010
En revanche tu es sur 2002, donc sur Mac, là est peut-être le souci
Effectue quand même une recherche dans ton VBA project du terme "Cellule" voir si tu ne l'as pas définit autrement ailleurs
A+
Bonjour Bruno
Merci pour ton intervention.
Version Excel :
Pas de Mac !
Excel 2002 est une honnête version pour PC installée sur un PC avec le CD prévu pour.
Variable « Cellule » :
J’ai vérifié
- tous les « Dim Cellule As » correctifs sont écrits dans le corps des routines utilisatrices de la variable.
(accessoirement cela me rappelle que ce souci est assez ancien) ;
- le seul « Public Cellule As Variant » est écrit dans le module « a_ConstantesEtVariables »
Son existence ne gêne pas les « Dim » correcteurs dont la présence palliatrice permet le fonctionnement des routines.
Comportement toujours mystérieux
Cordialement
André Blanquer
Bonjour André
AndréBlanquer a écrit :Version Excel :
Pas de Mac !
Excel 2002 est une honnête version pour PC installée sur un PC avec le CD prévu pour.
Désolé, je ne mettait aucunement ton intégrité en doute
Effectivement 2002 c'est la version qu'on appelait "XP" à mon taf, on l'a vite abandonné tellement on avait des soucis avec
AndréBlanquer a écrit :Variable « Cellule » :
J’ai vérifié
- tous les « Dim Cellule As » correctifs sont écrits dans le corps des routines utilisatrices de la variable.
(accessoirement cela me rappelle que ce souci est assez ancien) ;
- le seul « Public Cellule As Variant » est écrit dans le module « a_ConstantesEtVariables »
Son existence ne gêne pas les « Dim » correcteurs dont la présence palliatrice permet le fonctionnement des routines.
Perso,
Je supprimerais tous les "Dim Cellule As"
Si tu veux initialiser ta variable objet, tu peux utiliser
Set Cellule = NothingJe n'utiliserais pas non plus "Variant" pour définir ta variable publique, appelons un chat un chat, surtout en VBA
Public Cellule As RangeVoilà tout ce que je peux dire
A+
Bonsoir
Bonsoir BrunoM45
Je rajouterai une chose à ce que dit BrunoM45, vérifies si tu n'as pas une macro, le nom d'un module, un userform qui s'appelle Cellule
Mais ton fichier avec ce problème nous aiderait (ou pas) à comprendre le problème
Bonjour à tous.
Je reviens vers le forum et mon problème après quelques jours d’absence.
Merci BrunoM et Banzai64 pour vos commentaires.
BrunoM, avec votre réflexion
« Effectue quand même une recherche dans ton VBA project du terme "Cellule" voir si tu ne l'as pas défini autrement ailleurs » vous aviez identifié le problème, mais je n’ai pas été assez fûté pour le comprendre immédiatement.
Bref, si j’avais vérifié que le module où je regroupe mes variables ne contenait pas un Cellule perturbateur, je n’ai pas examiné les noms des modules, en particulier celui du module rassemblant les routines intervenant sur les cellules, module logiquement nommé "Cellule".
Je vais donc faire ce que je fais dans mes routines plus lourdes où j’utilise plusieurs modules que je souhaite classer dans une ordre logique : les nommer avec en tête une lettre de l’alphabet et un underscore !
Heureusement que Banzai64 s’est chargé de me mettre les points sur les i ! Ce n’était pas un UserForm appelé Cellule, mais là, si je n’avais pas regardé les noms de modules, j’aurais été indigne de poser une question sur ce Forum !
Merci à tous deux.
BrunoM, je vais regarder ce que cache « Set Cellule = Nothing », syntaxe que je n’utilise pas (pas encore !).
Et excuse-moi, je n’avais pas cru que tu « mettais en doute mon intégrité » : en fonction du contexte, "honnête" prend souvent chez-moi le sens de "banal", "quelconque" ou tout autre "synoyme approché".
Excel 2002 serait un Excel à problèmes ? Ma foi jusqu’à présent, je n’ai eu de souci avec lui que depuis qu’il tourne sur Windows 8, avec quelques plantages intempestifs (par exemple en ouvrant un fichier.xls chargé sur un forum, ce qui vient de m’arriver) ou parce que la défintion de l’écran rend les icônes un peu petits pour ma vue, mais là ce n’est pas de sa faute.
J’ai jeté un oeil sur la version 2016 d’Excel. Toujours pas d’option « menus à l’ancienne », donc je reste en 2002... à moins que je ne trouve un CD Excel 2003 qui traînerait dans la rue.
Bon, félicitations et merci encore à tous deux.
André Blanquer
Bonjour à tous.
Je reviens vers le forum et mon problème après quelques jours d’absence.
Merci BrunoM et Banzai64 pour vos commentaires.
BrunoM, avec votre réflexion
« Effectue quand même une recherche dans ton VBA project du terme "Cellule" voir si tu ne l'as pas défini autrement ailleurs » vous aviez identifié le problème, mais je n’ai pas été assez fûté pour le comprendre immédiatement.
Bref, si j’avais vérifié que le module où je regroupe mes variables ne contenait pas un Cellule perturbateur, je n’ai pas examiné les noms des modules, en particulier celui du module rassemblant les routines intervenant sur les cellules, module logiquement nommé "Cellule".
Je vais donc faire ce que je fais dans mes routines plus lourdes où j’utilise plusieurs modules que je souhaite classer dans une ordre logique : les nommer avec en tête une lettre de l’alphabet et un underscore !
Heureusement que Banzai64 s’est chargé de me mettre les points sur les i ! Ce n’était pas un UserForm appelé Cellule, mais là, si je n’avais pas regardé les noms de modules, j’aurais été indigne de poser une question sur ce Forum !
Merci à tous deux.
BrunoM, je vais regarder ce que cache « Set Cellule = Nothing », syntaxe que je n’utilise pas (pas encore !).
Et excuse-moi, je n’avais pas cru que tu « mettais en doute mon intégrité » : en fonction du contexte, "honnête" prend souvent chez-moi le sens de "banal", "quelconque" ou tout autre "synoyme approché".
Excel 2002 serait un Excel à problèmes ? Ma foi jusqu’à présent, je n’ai eu de souci avec lui que depuis qu’il tourne sur Windows 8, avec quelques plantages intempestifs (par exemple en ouvrant un fichier.xls chargé sur un forum, ce qui vient de m’arriver) ou parce que la défintion de l’écran rend les icônes un peu petits pour ma vue, mais là ce n’est pas de sa faute.
J’ai jeté un oeil sur la version 2016 d’Excel. Toujours pas d’option « menus à l’ancienne », donc je reste en 2002... à moins que je ne trouve un CD Excel 2003 qui traînerait dans la rue.
Bon, félicitations et merci encore à tous deux.
André Blanquer