Pb Excell / VBA (erreur sur Range.Value)
ashrem
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
ashrem Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
ashrem Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je cherche à mettre en place sous Excell une liste déroulante apparaissant uniquement si une valeur précise d'une autre liste déroulante est sélectionnée (liste en cascade mais en récupérant bien les deux valeurs sélectionnées). J'ai créé mes deux listes déroulantes sous excell de façon très classique (à partir de l'onglet Données -> Validation des données ... (sélection d'une plage de cellules).
Je suis ensuite partis sur l'idée de cacher (grâce à la macro ci dessous) cette deuxième liste quand la valeur approprié de la première liste (en l'occurrence "Forge World" n'est pas sélectionnée).
Tout ceci semblait pas trop mal marcher sauf qu'en faisant plusieurs sélections successives dans ces deux listes déroulantes, on arrive invariablement à une erreur causée par la valeur Range("C28").Value="". J'ai essayé en mettant ".", en intégrant dans ma liste un espace vide (dès fois que le problème vienne du fait que je force un espace vide à une liste n'en contenant pas à l'origine) mais ça ne change rien.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C26").Value = "Forge World" Then
Range("C28").Interior.ColorIndex = 2
Else
Range("C28").Interior.ColorIndex = Null
Range("C28").Value = ""
End If
End Sub
Si quelqu'un peut m'expliquer ou a une autre solution je suis preneur.
Merci.
je cherche à mettre en place sous Excell une liste déroulante apparaissant uniquement si une valeur précise d'une autre liste déroulante est sélectionnée (liste en cascade mais en récupérant bien les deux valeurs sélectionnées). J'ai créé mes deux listes déroulantes sous excell de façon très classique (à partir de l'onglet Données -> Validation des données ... (sélection d'une plage de cellules).
Je suis ensuite partis sur l'idée de cacher (grâce à la macro ci dessous) cette deuxième liste quand la valeur approprié de la première liste (en l'occurrence "Forge World" n'est pas sélectionnée).
Tout ceci semblait pas trop mal marcher sauf qu'en faisant plusieurs sélections successives dans ces deux listes déroulantes, on arrive invariablement à une erreur causée par la valeur Range("C28").Value="". J'ai essayé en mettant ".", en intégrant dans ma liste un espace vide (dès fois que le problème vienne du fait que je force un espace vide à une liste n'en contenant pas à l'origine) mais ça ne change rien.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C26").Value = "Forge World" Then
Range("C28").Interior.ColorIndex = 2
Else
Range("C28").Interior.ColorIndex = Null
Range("C28").Value = ""
End If
End Sub
Si quelqu'un peut m'expliquer ou a une autre solution je suis preneur.
Merci.
8 réponses
je ne comprend pas trop pourquoi tu utilise les cellules dans ton code alors que ton problème se trouve sur les combobox ?
sur l'évenement change du combobox1 (ou celle que tu veu) ou bien sur l'évenement change du worksheet:
if combobox1.value="ta valeur" then
combobox2.hide=true
else combobox2.hide=false
end if
sur l'évenement change du combobox1 (ou celle que tu veu) ou bien sur l'évenement change du worksheet:
if combobox1.value="ta valeur" then
combobox2.hide=true
else combobox2.hide=false
end if
Bonjour,
1- Quel est exactement le message d'erreur?
2- Qu'elle version d'Excel utilise tu?
Ton code fonctionne chez moi (Excel 2003)
1- Quel est exactement le message d'erreur?
2- Qu'elle version d'Excel utilise tu?
Ton code fonctionne chez moi (Excel 2003)
En fait je n'utilise pas une combobox mais une liste prédéfinie (+ simple a mettre en œuvre à priori). cf page web: http://sba.microsoft.com/apnews/ringstrom.ExcelListManage.asp
Pour la version c'est du 2007
Le code passe 9 fois sur 10 chez moi aussi et je ne l'ai pas remarqué tout de suite. L'erreur se produit uniquement quand je change ma sélection plusieurs fois de suite dans ma liste prédéfinie: Range("C26")
Fenêtre d'erreur Visual Basic:
Erreur d'exécution : '2147417848 580010108)':
La méthode 'value' de l'objet 'Range' a échoué
Pour la version c'est du 2007
Le code passe 9 fois sur 10 chez moi aussi et je ne l'ai pas remarqué tout de suite. L'erreur se produit uniquement quand je change ma sélection plusieurs fois de suite dans ma liste prédéfinie: Range("C26")
Fenêtre d'erreur Visual Basic:
Erreur d'exécution : '2147417848 580010108)':
La méthode 'value' de l'objet 'Range' a échoué
J'ai essayé en modifiant le code ainsi mais ça me produit toujours le même type d'erreurs:
OU ENCORE COMME CELA:
Et j'ai toujours cette même erreur, même si je n'utilise plus:
Le problème vient de la ligne :
Du coup j'ai passé le format de cette cellule de "Standard" à "Texte" (click droit sur la cellule) et ça a l'air de fonctionner.
La prochaine fois j'essaie les combobox ;)
Private Sub Worksheet_Change(ByVal Target As Range) If Worksheets("Creation").Cells(26, 3).Value = "Forge World" Then Range("C28").Activate Range("C28").Interior.ColorIndex = 2 Else Range("C28").Interior.ColorIndex = Null Range("C28").Value = "" End If End Sub
OU ENCORE COMME CELA:
Private Sub Worksheet_Change(ByVal Target As Range) If Worksheets("Creation").Cells(26, 3).Value = "Forge World" Then Range("C28").Activate Range("C28").Interior.ColorIndex = 2 Else Range("C28").Interior.ColorIndex = Null Worksheets("Creation").Cells(28, 3).Value = "" End If End Sub
Et j'ai toujours cette même erreur, même si je n'utilise plus:
Range("C26").value
Le problème vient de la ligne :
Worksheets("Creation").Cells(28, 3).Value = ""puisque quand je la met en commentaire ou que je remplace le "" par un "." ça marche.
Du coup j'ai passé le format de cette cellule de "Standard" à "Texte" (click droit sur la cellule) et ça a l'air de fonctionner.
La prochaine fois j'essaie les combobox ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Voici ce que j'avais fait pour éviter l'alerte lors d'un changement dans la validation "mère"
Voici ce que j'avais fait pour éviter l'alerte lors d'un changement dans la validation "mère"
Private Sub Worksheet_Activate() Union(Range("deb"), Range("fin")).ClearContents End Sub Private Sub Worksheet_Change(ByVal Target As Range) Static flag As Boolean ' "deb" liste validation "mère" ; "fin" liste validation "fille" If Target.Address <> Range("deb").Address Then: Exit Sub If IsEmpty(Range("fin")) Then Application.DisplayAlerts = False End If If flag Then flag = False Exit Sub End If flag = True Range("fin").ClearContents Application.DisplayAlerts = True End Sub
Je ne sais pas si cela va t'aider (le code fonctionne bien chez moi quelque soit la syntaxe cells, range etc...) essaye simplement ceci :
ps : quand on place du code sur un forum, il est de bon ton de signaler ce code comme tel en le placant sous les balises spécifiques. Tu trouveras ces balises, sur CCM, à droite du bouton souligné : conserver la mise en forme du texte sélectionné...
Private Sub Worksheet_Change(ByVal Target As Range) If Range("C26").Value = "Forge World" Then Range("C28").Activate Range("C28").Interior.ColorIndex = 2 Else Range("C28").Interior.ColorIndex = Null Worksheets("Creation").Cells(28, 3) = "" End If End Sub
ps : quand on place du code sur un forum, il est de bon ton de signaler ce code comme tel en le placant sous les balises spécifiques. Tu trouveras ces balises, sur CCM, à droite du bouton souligné : conserver la mise en forme du texte sélectionné...
Merci à tous, je pense que le problème venait donc du fait que je voulais attribuer une chaine de caractères vide à un range créé sur une case ayant un format standard.
J'ai en effet passé le format de cette cellule de "Standard" à "Texte" (click droit sur la cellule) et ça a l'air maintenant de fonctionner.
J'avoue que je ne comprends pas tout puisque qu'on peut attribuer un chaine vide à une case normale sans problème, mais les "range" modifient sans doute le truc ...
Je fais encore quelques tests avant de mettre le sujet en "Résolu".
Merci encore.
J'ai en effet passé le format de cette cellule de "Standard" à "Texte" (click droit sur la cellule) et ça a l'air maintenant de fonctionner.
J'avoue que je ne comprends pas tout puisque qu'on peut attribuer un chaine vide à une case normale sans problème, mais les "range" modifient sans doute le truc ...
Je fais encore quelques tests avant de mettre le sujet en "Résolu".
Merci encore.
Bon en fait par rapport à la liste ça ne provoque plus d'erreur au niveau de la sélection.
Par contre vu que je veux récupérer les résultats, là ça plante dès que je fais un choix autre que Forge World.
Même erreur que précédement et de plus le debogage m'amène à cette fameuse ligne de la macro:
Je veux donc mettre en place une structure conditionnelle sur une cellule de ma feuille Excel qui donne différents résultats suivant les choix fait avec les deux listes prédéfinies (Range) :
De même quand j'ai C26 => Forge World et C28 => WS et que je reviens sur C26 pour modifier mon choix, C28 disparait (normal) mais par contre j'ai systématiquement un plantage. :(
Par contre vu que je veux récupérer les résultats, là ça plante dès que je fais un choix autre que Forge World.
Même erreur que précédement et de plus le debogage m'amène à cette fameuse ligne de la macro:
Worksheets("Creation").Cells(28, 3).Value = ""
Je veux donc mettre en place une structure conditionnelle sur une cellule de ma feuille Excel qui donne différents résultats suivant les choix fait avec les deux listes prédéfinies (Range) :
=SI(EXACT(C26;"Forge World");SI(EXACT(C28;"WS");-2;-5);"")
De même quand j'ai C26 => Forge World et C28 => WS et que je reviens sur C26 pour modifier mon choix, C28 disparait (normal) mais par contre j'ai systématiquement un plantage. :(