Erreur 424 TextBox problème simple VBA
Bonjour,
Je suis débutant sur Excel et cherche à résoudre un problème qui me paraît pourtant très simple (je n'ai pas trouvé ma réponse sur les forums) :
Je veux changer la couleur de fond d'un TextBox (BackColor) avec un bouton.
Le code est le suivant :
Sub Bouton1_Clic()
TextBox3.Value = ""
End Sub
En cliquant ensuite sur le bouton, j'obtiens un message d'erreur :
Erreur d'éxécution '424':
Objet requis
Que dois-je faire ?
Merci pour votre réponse
Bonjour,
Te rends-tu compte que tu dis des choses contradictoires et que tu ne dis pas l'essentiel !
Ton propos parle de BackColor à changer, ton code modifie Value ! Question : sais-tu ce que tu fais ?
Il y a une TextBox : sur feuille de calcul ou dans un Userform ?
Un bouton ? de formulaire ou ActiveX ? (le nom plaide pour formulaire, et dans ce cas il est sur une feuille, mais il faut le confirmer)
On clique sur le bouton et erreur ! Bé oui !
Oui je me suis trompé désolé ! Le code était :
Sub Bouton1_Clic()
TextBox3.BackColor = RGB(255, 0, 0)
End Sub
TextBox : sur feuille de calcul (prise sur Contrôles ActiveX)
Bouton : contrôle de formulaire, oui il est bien sur la feuille de calcul
Merci pour ta réponse, mais je ne comprend pas quand tu parle de qualification et de Range...^^
mais je ne comprend pas quand tu parle de qualification et de Range...^^
C'est bien là un vrai problème car ce devrait être l'un des premiers rudiments de VBA à maîtriser !...
Tu écris Range("A1") : il ne doit pas t'échapper que tu utilises la propriété Range de l'objet Application pour renvoyer un objet Range...
Tu écris Range, VBA va entendre Application.Range et le traduire par Application.ActiveSheet.Range et partir à la recherche de la feuille active...
Il ne doit pas t'échapper non plus que des Range("A1") il y en dans chaque feuille existante, et qu'il y en aura dans toute feuille ultérieurement créée, et que tu n'es pas forcément en mesure de prévoir quelle sera la feuille active à chaque fois... Pour gagner en précision donc, et en fiabilité (et en rapidité) il est préférable de préciser la feuille dont tu veux renvoyer une plage !
Ne serait-ce que par ActiveSheet.Range qui est sans ambiguïté dans une procédure lancée par bouton sur une feuille (qui devra être active pour qu'on puisse cliquer sur le bouton), tant que la procédure ou une autre appelée par la première n'est pas susceptible de modifier cette situation.
Savoir à quel objet parent on réfère pour renvoyer un objet à partir d'une propriété de cet objet parent (car ce n'est jamais l'objet que tu appelles !!!) est donc une question que l'on doit se poser en permanence, dans chaque cas...
S'agissant d'une TextBox sur une feuille de calcul, la question est la même, à ceci près que VBA ne va remonter à l'application pour partir à la recherche de la feuille active... Application ne pouvant intervenir comme objet parent implicite dans ce cas, si tu es dans le module de la feuille ou dans un module de Userform (si la TextBox est dans ledit Userform) le rattachement à l'objet pourra s'opérer, mais dans tout autre cas VBA réclamera l'objet manquant : "objet requis !"
Donc tu indiques l'objet : Worksheets("Feuil1").TextBox1 et les choses peuvent suivre leur cours...
Mais ce qui est important dans l'affaire, ce n'est pas de surmonter l'erreur apparue fortuitement, mais bien de comprendre la raison qui la fait apparaître et la façon dont s'articule la hiérarchie des objets dans ce système de programmation. Ce qui te permettra par la suite d'éviter de provoquer bon nombre d'erreurs dans ton code...
Cordialement.
Super ! Effectivement ça marche
A moi maintenant de décortiquer ton message pour comprendre comment tout cela fonctionne
Merci !