Liste déroulante avec VBA

Bonjour!

Je suis actuellement en stage et coincé par quelques formalités (si je peux dire)

J'ai reussi a faire une liste déroulante parfaitement opérationnelle (en position X9) dans laquelle on peu choisir (avec la pitite flèche sur la droite de la cellule liste) la valeur qui nous intéresse. Dans mon cas, ce sont les valeurs 1.1 1.2 1.3 et 1.4 .

Je n'arrive pas à obliger ma liste à adopter les différentes valeurs avec VBA...

Pour une cellule banale, j'aurais écrit Range("X9").Value = 1.1 (ce que jai fait meme s'il s'agit d'une liste XD) mais il écrit ensuite dans ma feuille en X9 : 1,1 (au lieu de 1.1) etc. et les autres cellules de ma feuille (qui y sont liées) m'affichent ducoup #N/A

Est-ce que je me trompe de formule ou est ce que je dois,dans la colonne (à laquelle est référée ma liste) remplacer tous les nombres de la forme x.y par des nombres de la forme x,y?

Merci à vous de vous pencher sur ce sujet, moi je me suis déjà arraché la moitié des cheveux sur ce problème... :-s

Bonjour

Essaye :

Range("X9").Value = "1.1"

Amicalement

Nad

Salut Nad,

J'avais répondu à Sym sur le post "Imprimer via Macros".

Le Range("X9").Value = "1.1" ne marche pas sur un excel français apparemment.

Par contre le code suivant marche :

Range("X9").FormulaLocal = "1.1"

Bonjour vbanew

Chez moi, ça renvoie le même résultat (du numérique)

Amicalement

Nad

Le code que j'ai donné marche chez moi, ça affiche bien 1.1, je sais pas pourquoi.

Sinon, mettre peut-être la cellule au format texte avant d'inscrire la valeur ? :

Range("X9").NumberFormat = "@"
Range("X9").Value = "1.1"

Bonjour

A tousazar

separateur systeme

Si pas ça : I am sorry

Salut à tous!

Merci beaucoup pour tous ces conseils! J'ai hâte de finir ce week end pluvieux (enfin... façon de parler ) pour aller vérifier laquelle de ces solutions marche. J'avais en effet déjà essayé sans succès:

Range("X9")= 1.1

Range("X9")="1.1"

et un troisième (j'avais déjà précisé tout çà dans "imprimer via macro")

Je vous dis à mardi pour de nouvelle aventures! Ou juste pour de nouveaux résultats

Amicalement content, Sym.

J'ai essayé la formule

Range("X9").FormulaLocal = "1.1"

et çà marche niquel! Encore merci à tous! Vous m'avez permis d'avancer mon casse-tête d'une étape

-- 15 Juin 2011, 08:24 --

Bonjour!

Comme je disais, j'en suis a l'étape suivante de mon problème...

Dans la liste de "référence" de la liste déroulante, les utilisateurs auront le choix de supprimer telle ou telle ligne de cellule (tranchant alors la liste dite de référence et la liste déroulante de quelques étapes (par exemple, pour la première, elle ne comportera après coup que 1.1 et 1.3) 1.2 et 1.4 ne nous intéressant pu, il ne sera pas nécessaire d'ecrire range(X9).formulaLocal = "1.2" ou = "1.4" seulement, vous devinez que je n'ai pas du tout envie de changer mon code a chaque fois

Cependant, j'ai remarqué qu'en retranchant une ligne dans la liste dite de référence, la valeur correspondante dans la liste déroulante s'enlevait toute seule (ouff!!! )

Existe il donc une ligne de code qui me permettrait de balayer les valeurs de la liste déroulante (et de pouvoir faire des actions / rajouter des lignes de codes, a chaque fois qu'il adopte une nouvelle valeur)?

Encore merci de toute votre aide

Amicalement sym

En regardant l'aide d'excel, j'ai pensé à quelques lignes de codes

Seuls problèmes étants qu'il me manque la formule magique (si elle existe) permettant de connaitre le nombre d'éléments d'une liste déroule. :

1 Sub Imprimer(nbEltsListe)

2 Sheets("THÈME 1)"

3 for counter = 1 To nbEltsListe

4 Range("X9").FormulaLocal = "1."counter " fiche1"

5 ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

6 Next counter

7 End Sub

Mon second problème réside à la ligne 4, pensez vous que la formule est correcte pour afficher "1.x fiche1"?

Une fois de plus, je serais très heureux d'avoir des réponses a ces problèmes

Sym

-- 15 Juin 2011, 15:53 --

Por connaitre ma "formule magique", j'ai pensé à quelques lignes de codes...

Tout d'abbord je tiens a préciser que la liste à laquelle fais ref. ma liste déroulante se situe dans une feuille "base" et qui est en fait un morceau de colonne de tableau, morceau que j'ai nomé Theme1... Voici le code:

1. Sub Afficher()

2. Sheets("Base").Select

3. nbElts = Theme1.Rows.Count

4. Style = vbYesNo

5. Réponse = MsgBox(nbElts, Style)

6. If réponse = vbYes Then

7. MyString = "oui"

8. Else

9. MyString = "Non"

10. End if

11. End sub

Et là, il me trouve une erreur à la deuxième ligne...

Savez-vous comment procéder?

Merci d'avance, sym

Bonjour sym,

Essaie avec ce code :

Sub Afficher()
    nbElts = ThisWorkbook.Names.Item("Theme1").RefersToRange.Count
    Style = vbYesNo
    réponse = MsgBox(nbElts, Style)
    If réponse = vbYes Then
        MyString = "oui"
    Else
        MyString = "Non"
    End If
End Sub

Bonjour!

Merci beaucoup pour votre aide mais, a vrai dire, j'avais essayé ce matin en remplaçant la ligne 2 par:

Range("Theme1").Select

NbElts = Sélection.Row.Count

Et ca marchait... Quelles différences avec votre code?

J'aurais ensuite une autre question...

J'avais fais une autre macros nommée "Balayer"

Qui me permettrait d'afficher les différentes valeur (1.1 à 1.nbElts)

Que j'avais introduit comme tel:

Sub Balayer(nbElts)

End Sub

Mais impossible de lire la maccro, comme si elle n'existait pas;

J'ai donc "fusionné" les deux maccros suite à quoi ca marchait,

Ma question est la suivante : pk il ne la considère pas comme une maccro et quel est l'intérêt de mettre un argument entre () comme je l'ai fait?

Je pensais le mettre car il en avait besoin et qu'il était établi à la macro "afficher" ci dessus.

-- 16 Juin 2011, 15:59 --

Rebonjour à tous!

J'ai fait le code suivant pour pouvoir afficher chacune des valeurs de ma liste (en travaillant sur la liste de "ref" nommée "Thème1" dans la feuille "Base")

Sub Balayer()

Sheets("Base").Select

Range("Thème1").Select

nbElts1 = Sélection.Rows.Count

For counter1 = 1 To nbElts1

Vale = "1." & counter1

Rep = MsgBox(Vale)

... (paragraphe pr imprimer, inintéressant ici)

Next counter1

Seulement, l'utilisateur doit pouvoir supprimer des lignes de Thème1

Ces lignes de code n'affichent suite à quoi les premières valeurs de la liste mais pas forcément les bonnes

(petit exemple: imaginez la liste 1.1 1.2 1.3 et 1.4

Après suppression de 1.2 et 1.3, le code affichera 1.1 et 1.2

Au lieu de 1.1 et 1.4...

J'avais donc imaginé:

For counter1 = 1 To nbElts1

Num = 19 + counter1 'tableau commence ligne19

Vale = Range(Inum).FormulaLocal 'tableau sur colonne I

Rep = MsgBox (Vale)

Mais vous comprendrez avant même d'avoir essayé que ça ne marche pas...

Existe-il une solution à ce problème?

Deplus, pour la suite, je ne pourrais pas savoir à quelle ligne commence le tableau, tout dépendra du nombre de lignes supprimées..

Salut sym,

Sym a écrit :

Range("Theme1").Select

NbElts = Sélection.Row.Count

Et ca marchait... Quelles différences avec votre code?

Ton code est plus simple. Tu peux même l'optimiser en faisant : NbElts = Range("Theme1").Count

Il faudrait que tu joignes un bout de fichier si possible car là je commence à rien comprendre. Pourquoi parles-tu de supprimer des lignes ?

Bonsoir! J'avoue que je pars un peu dans toutes les directions et qu'il doit pas être facile de me suivre

voilà mon fichier excel dans les grandes lignes (celles qui sont utiles ) et ses macros.

Téléchargez le, ouvrez le et laissez moi essayer de vous guider:

Feuilles

Vous avez une feuille base et des feuilles THEME. Dans chacune des feuilles Thème, il y a une liste déroulante en position X9. Cette liste déroulante est issue de la Méga-Liste du tableau de base (fragmentée en petites parties chacune appelées "Thème") (Thème1 pour THEME 1)

Telle ou telle valeur de la liste change l'entête de la feuille et selon les besoins toutes les feuilles de chaque feuille THEME devra être imprimée. (J'espère que je ne vous emmêle pas les pinceaux avec les feuilles et les feuilles)

Macros

*La première macro est SupprimerLigne ; dans la feuille base, il faut selectionner une ligne du tableau (le grand tableau) et appuyer sur le petit bouton rouge à côté de supprimer. En effet, le personnel utilisant ce logiciel ne devra pas remplir (donc imprimer) toutes les feuilles, il aura par exemple besoin des feuilles 1.1, 1.4, 2.5, 2.8 et 2.9 ...

*La deuxième macro, Imprimer() qui a décidé de me poser problèmes à tous les niveaux, sert à imprimer toutes ces feuilles; elle a cependant besoin (début de la macro) de balayer chacune des valeurs (qui n'ont pas été supprimées) des listes. Tout marche très bien si la première macro n'est pas utilisée, seulement, dès qu'elle a servit elle décale tout. (Comme je disais tout à l'heure, supprimer les lignes de 1.1 et 1.2 fera afficher à Imprimer() les valeurs 1.1 et 1.2 au lieu de 1.3 et 1.4 )

En espérant avoir été assez clair...

Sym

-- 16 Juin 2011, 23:14 --

Pourquoi j'ai l'impression de ne pas avoir envoyé le fichier?

Vous l'avez?

Il était trop gros le saligo !!

Bonjour! J'ai reussi à compiler ce que je voulais mais il me reste un petit soucis...

Voyons d'abbord ce que j'ai fais :

Sub Imprimer2()

Sheets("Base").Select
Range("Thème1").Select
NbElts1 = Sélection.Rows.Count

For counter1 = 1 To nbElts1
     Sheets("Base").Select
     Num = 18 + counter1
     Vale1 = ActiveSheet.Cells(num, 9).Formula
     Sheets("THEME 1").Select
     Rep = MsgBox(Vale1)
     'Gros blabla pr imprimer mais inutile dans la compréhension
Next counter1

Sheets("Base").Select
Range("Thème2").Select
NbElts2 = Sélection.Rows.Count

For counter2 = 0 To nbElts2
     Sheets("Base").Select
     Num = 18 + nbElts1 + 1 + counter2
     Vale2 = ActiveSheet.Cells(num, 9).Formula
     Sheets("THEME 2").Select
     Rep = MsgBox(Vale2)
     'Gros blabla pr imprimer mais inutile dans la compréhension
Next counter2

...

Sheets("Base").Select
Range("Thème82").Select
NbElts8 = Sélection.Rows.Count

For counter8 = 1 To nbElts8 - 1
     Sheets("Base").Select
     Num = 18 + nbElts1 + nbElts2 + nbElts31 + nbElts32 + nbElts4a + 
                 nbElts4b+ nbElts5 + nbElts6 + nbElts7 + 1 + counter8
     Vale8 = ActiveSheet.Cells(num, 9).Formula
     Sheets("constat libre").Select
     Rep = MsgBox(Vale8)
     'Gros blabla pr imprimer mais inutile dans la compréhension
Next counter8

Sheets("Base")

End Sub

Ne soyez pas choqués, j'ai volontairement enlevé du fichier (lien ci dessus) les feuilles thème 3-1, thèmes-2, thème 4a, thème 4b, thème 5, thème 6, thème 7 et constat libre pour qu'il prenne moins de place.

Mon problème est le suivant : dans la feuille base, il est possible Grace à la macro SupprimerLigne de supprimer des lignes du tableau. Celà implique que, si nous supprimons toutes les lignes d'un même thème, (par exemple Thème72), lors de l'exécution du code, arrivé à ce thème, la macro plante

En effet, si on marque

Range("Thème72").Select

Alors qu'il n'existe plus, le programme ne saura pas le sélectionner...

Je vous demande donc,

Comment créer une condition d'existence?

Quelque chose du genre:

 if Thème72 existe
 Range("Theme72").Select 

Je suis sûre qu'il ne me manque pas plus de deux lignes de code mais... Je les trouve pas =(

Si vous avez du mal, je pourrais vous laisser le programme entier ce soir (je pourrais maintenant mais je n'ai pas envie de le retapper entieremt sur mon iPhone ^^)

En attendant, bonne compréhension et merci de m'aider

Tu peux essayer :

On Error Resume Next
Set nom = Range("Thème72")
If Not nom Is Nothing Then nom.Select

Bonjour!

Merci de ton aide mais j'avais finalement reussi à me debrouiller debrouiller d'une façon plus simple (plus simple car je ne devais pas repartir de zéro)

Enfait ça avait marché en rajoutant ligne 2 : Range("Theme1").Select

Et en changeant la ligne 3 par : nbElts = Sélection.Row.Count

Voili voilou!

Mais encore merci, ca fait plaisir de voir des réponses a

Nos questions =)

Rechercher des sujets similaires à "liste deroulante vba"