Selection dans une liste.

cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 juin 2006 - 3 mai 2006 à 15:03
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 mai 2006 à 11:13
Bonjour à tous!

Je suis actuellement en stage et je dois réaliser un planning bien défini sous Excel.
Je suis en train d'apprendre en même temps des notions de Vba mais le temps m'est compté et j'aurai voulu avoir quelques indications concernant l'utilisation de liste dans une macro. Je n'ai malheureusement pas trouvé de sujet similaire dans le forum.

J'ai donc crée ma liste directement dans une macro:

/quote

Range("F2:I3").Select
Dim Mois()
Mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre")

[quote]

J'aurai pu créer la liste dans une feuille mais par soucis de propreté,
j'ai trouvé plus judicieux de la mettre ici, facilitant ainsi les
opérations.

J'aimerai si possible, en utilisant une "barre de défilement",  faire défiler les mois suivants ou  précedents correspondant à celui préalablement rentré dans la cellule.

Je répète que je suis débutant, donc n'hésitez pas à me dire ce qu'il ne va pas ou ce que je n'aurai pas compris :o

Merci à vous.

9 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mai 2006 à 16:20
C'est à dire que tu à dans une cellule un mois ("Janvier" par exemple) et lorsque tu clique sur une barre de défilement modifier cette donée en "Février" par exemple?

Si c'est ca :
il faut tout d'abord configurer ta barre de défilement (valeur maxi mini et le nombre de "pas" en cas de "grande" modif soit quand tu click sur la barre et non les bouton quelle contien)

    ScrollBar1.Max = 12
    ScrollBar1.Min = 1
    ScrollBar1.LargeChange = 0 'donc ici il ne se passe rien

pour affecter la valeur voulu dans la cellule selectioner
Private Sub ScrollBar1_Change()
    Selection = Mois(ScrollBar1.Value)
End Sub

D'oh! Nuts!
Mmmmm...
 DONUTS
0
cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 juin 2006
3 mai 2006 à 17:18
Tout d'abord merci Polack77, le résultat est déjà beaucoup plus probant :)
Je me permet simplement de demander une petite précision.

La cellule est toujours modifiable à la main, ce que je souhaite évidement, mais le problème c'est que la macro garde en mémoire le dernier mois issu de la macro, c'est à dire qu'après Juin, il m'affiche naturellement Juillet, mais si je tape à la main un autre mois, Mars par exemple, et bien l'action du bouton me renvoie le mois de Août, logique puisque venant après Juillet, Or, il devrait après lecture de la cellule me retourner Avril. =]

En tout cas merci encore, tu as bien saisis mon dilemne! :p
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mai 2006 à 17:27
Dans ce cas tu dois tester ce qui est dans ta cellule au début de ta fonction pour savoir quel mois y mettre
Private Sub ScrollBar1_Change()
dim Cpt as integer
dim FlagValeurTrouver as boolean
do while cpt < ubound(mois) and not FlagValeurTrouver 'ubound renvoi le numéro de la dernierre "case" de ton tableau et tu test ton flag car si le résultat est rouver ça ne sert à rien de continuer tes test
if mois(cpt) = selection.text then
scrollbar1.value = cpt
end if
cpt = cpt + 1
loop
Selection = Mois(ScrollBar1.Value)
End Sub

bon je n'ai pas tester cette fopnction mais ca dois le faire.

D'oh! Nuts!
Mmmmm...
DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mai 2006 à 17:36
Heeeeeeeee non ca vas pas le faire.
car la tu demande quel est le mois dans la cellule et tu met le même mois
Ta fonction de test dois donc être ailleur sur la modif de ta cellule (je ne crois pas que se soit possible mais verifi)
Heeeeeeeeeee si non je ne vois pas commant c possible.
Si non tu met un combobox "sur ta cellule" (au dessus quois tu trouve les combo box dans la boite à outils) et lanse la modif de ta barre de défilement sur modif de cette cellule
Attention à informer tes fonction que le modif est faite par la barre de défilement et non pas dans le texte si non tu aura une boucle infini, pour cela le plus simple à mon avi est de déclarer une variable global (déclarer à l'exterieur de toute fonction et je te conseille de la déclarer en private (private FlagModif as boolean) tu met cette variable à vrais au début de tes fonction "if FlagModif = vrais then exit sub" et juste appré tu met cette variable à vrais (n'oubli pas de la passer à faux à la fin de tes fonction)

j'espaire être claire

D'oh! Nuts!
Mmmmm...
DONUTS
0

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

Posez votre question
cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 juin 2006
4 mai 2006 à 16:56
Bonjour,

hum en ce qui concerne le probleme lors de la saisie manuelle du mois je me débrouillerai autrement quite à verrouiller la cellule pour ne pas inciter les utilisateur à tester, merci quand même ^^.
par contre, j'aimerai dans cette cellule integrer également l'année et en gros, l'incrémenter de 1 dès qu'on demande le mois suivant après décembre.. Apres quelques tentatives peu fructueuses, le prog ne reconnait plus la chaine "mois année" comme une date et ca fausse ducoup tout mon calendrier dynamique :/
Quelqu'un (je te sens chaud Polack77 :p) pourrait-il m'éclaircir un peu sur le sujet?

D'avance Merci.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mai 2006 à 09:08
Tu pourais peut être définir en code non pas "mois année" mais "jours mois année" (quite à mêtre le 01 de chaque mois") et pour afficher ta date tu fais "format(cdate("01 décembre 1981"),"mmmm yyyy")" ("01 décembre 1981" est bien sur à remplacer par ta variable) tu peut ester si ta conversion en date (cdate(...)) vas fonctionner avec "isdate("01 décembre 1981")" qui te renvoie un boolean je crois.
Bon ba voila j'etais chaud.

D'oh! Nuts!
Mmmmm...
DONUTS
0
cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 juin 2006
5 mai 2006 à 10:02
lol, merci encore pour ces précisions.

Le Hic, c'est que justement, en rentrant un mois et une année, ca fait évoluer mon tableau comprenant tout les jours du mois/année correspondant.
Donc faire apparaitre les jours n'aurait mise a part de faire marcher la fonction aucune utilité et au niveau ergonomie, le but étant ld'être e plus clait possible sans ajouter du superflux =)

D'autres moyens existent mais j'aimerai vraiment rester dans l'optique de modifier seulement le mois et que ca agissent sur l'année de la meme cellule et sur les jours du tableau crée.

Merci en tout cas Polack77de te donner tant de mal pour m'aider :o
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mai 2006 à 11:11
Dans ce cas tu test quand ton utilistaeur fais "suivant" si tu à décembre dans la cellule et tu concaténe la chaine. Pour n'avoir que le mois qui est dans la cellule le plus simple est je pense d'enlever de ta chaine les 5 dérnier caractérer pour cela :"left("décemebre 2005",len("décemebre 2005") - 5)"
len renvoi la longeur de la chaine
Attention : si la chaine fait moin de 5 carac tu aura une erreur. Test le "if len("décemebre 2005") > 5 then"

D'oh! Nuts!
Mmmmm...
DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mai 2006 à 11:13
et tu concaténe la chaine :
Ta fonction qui te renvoi le mois + tu déclar une variable année (dans la quelle tu stoque l'année bien sur)
text = mois & " " & année

D'oh! Nuts!
Mmmmm...
DONUTS
0
Rejoignez-nous