Pb Excell / VBA (erreur sur Range.Value)

Fermé
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011 - 27 janv. 2010 à 02:26
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011 - 27 janv. 2010 à 15:37
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.

8 réponses

garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
27 janv. 2010 à 10:20
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
27 janv. 2010 à 10:42
Bonjour,
1- Quel est exactement le message d'erreur?
2- Qu'elle version d'Excel utilise tu?

Ton code fonctionne chez moi (Excel 2003)
0
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011
27 janv. 2010 à 11:04
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é
0
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011
27 janv. 2010 à 14:10
J'ai essayé en modifiant le code ainsi mais ça me produit toujours le même type d'erreurs:

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 ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
27 janv. 2010 à 14:24
Bonjour,
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
27 janv. 2010 à 14:25
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 :

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é...
0
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011
27 janv. 2010 à 14:48
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.
0
ashrem Messages postés 32 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 25 avril 2011
27 janv. 2010 à 15:37
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:
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. :(
0