Combobox + calcul selon l'évolution annuel d'un taux
Bonjour
J'essaie de créer un fichier permettant de calculer automatiquement les coûts suivant les taux horaires de l'année concernée mais j'ai plusieurs problèmes.
Deja pour commencer l'affaire il faut comme son nom l'indique remplir des données sur la page INTRODUCTION. Je ne l'ai pas déplacée tout à gauche pour éviter de modifier les indices des anciens programmes (je le ferai à la fin).
- le 1e pb est dans le choix de la date en début et fin.
Je ne maîtrise pas encore très bien les Userforms et j'essaie par le biais d'un double clic seulement en G7 et I7 d'activer la fonction calendrier (cf userform déja modélisée sans fantaisies). Il affiche après un double clic sur nimporte quel cellule et il n'affiche pas la date à l'arrivée
- le 2e est dans les zones de listes créées à côté de année ''i''.
Je pourrai faire des listes de l'année 2011 à l'infini (ce n'est pas dur d'ou les zones de listes apparentes) mais je voulais savoir s'il était possible de faire qqch de plus interactif et bcp plus fun.
Par exemple, en année 1 on est en 2012. Si par exemple on passe en 2013, il suffirai de cliquer 2x sur année 2 pour qu'il affiche l'année i+1 et ainsi de suite.
- le 3e est une question pour savoir s'il existe sur excel vba (version 2000) des programmes pour créer des boutons plus sympa que ce qui est proposé ou les boutons bleus issus de formes auto qui ne bougent pas si on clique dessus ?
- et pour finir le 4e problème qui est le plus dur, je souhaiterai qu'il fasse une conversion automatique du taux horaire en fonction de la date ou l'on créé le bilan dans les feuilles 1e et 2e cas.
par exemple:
Si dans la zone ''utilisé'' on est au 31déc2011 dans une des lignes on utilise 15heures à 10 euros et qu'en février 2012 on a 3heures à 10,5 euros je veux qu'il soit capable d'afficher 18heures pour 181.5 euros (même raisonnement pour toutes les lignes) et ainsi de suite sur les 4 années (si ca dure 4ans)
Merci beaucoup d'avance
-- 05 Juil 2011, 11:37 --
Concernant le double clic sur l'année, j'ai trouvé une parade :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Range("F10")
Range("F10") = Range("D10").Value + 1
End With
End Subl'année 1 est écrite manuellement et le code s'adapte tout seul mais que pour l'année 2
le probleme est qu'il fonctionne en double cliquant sur n'importe quelle cellule pourtant j'ai bien spécifié en F10.
Si je mets le code pour l'année 3 avec D10 + 2 à la suite de celui de l'année 2, plus rien ne se passe.
Salut gladius et le forum
Je n'ai pas tout lu, mais j'ai testé ton USF.
Je n'ai regardé que le double-clic de la feuille 1er cas
Selection est rarement utile.
Ta macro de l'USF:
Private Sub cmdChDate_Click()
ActiveCell = Me.Calendrier
Unload Me
End Subpetite précision : une sélection peut comporter plusieurs cellules, alors qu'ActiveCell ne peut en comporter qu'une.
Ne comprenant pas ton code initial, je l'ai changé. Si tu avait l'habitude d'utiliser Me, en mettant le point, tu verrais que ce que tu avait mis n'apparaît pas dans la liste des propriétés/méthodes rattachée à ton USF.
Là, on met le jour dans la cellule active.
Tes cellules réceptrices d'après ce que je crois comprendre, sont dans la plage N7:O22. Faut être logique : pour afficher une date, il faut qu'elles sont dans un format date.
Ta macro Worksheet_BeforeDoubleClick de "1er cas" est erronée. Comme Je l'ai corrigée en premier, je vais donc expliquer ce qui me semble faut sur celle de la feuille Introduction. Bien que ce soit une critique de ton code, ne la prend pas comme dévalorisante. Ça ne sert à rien d'être susceptible quand on te montre tes erreurs.
Ton code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Range("G7").Select
Calendar.Show
End With
End SubExcel fait toujours ce que tu lui demandes et quelques (rares) fois ce que tu veux !
Utilisation du With erronée : With sert à mettre ce qui le suit en préfixe à toute instruction commençant par un caractère de liaison :
With AA
.BB
.CC
end with
revient à écrire
AA.BB
AA.CC
Donc, premièrement, pas de select dans une ligne avec With et deuxièmement, il faut des instructions en liaison avec ce que tu colles en préfixe.
Ta macro pour la feuille "1er cas" :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, [N7:O22]) Is Nothing Then Exit Sub
'Si on est pas dans la plage N7:O22 on sort
Cancel = True
'on annule l'entrée dans la cellule
Calendar.Show
'Lancement de l'USF calendar
'vérification
If Cells(Target.Row, "N") <> "" And Cells(Target.Row, "O") <> "" And _
Cells(Target.Row, "N") > Cells(Target.Row, "O") Then
MsgBox "la date de fin ne peut être supérieure à la date de début", _
vbExclamation, "Erreur de date"
Target.ClearContents
End If
End SubComme le code me paraît simple et que je l'ai renseigné, ça devrait suffire. Sinon demande.
Une bonne habitude à prendre, c'est de tester ce que l'on code pour la première fois avant de s'enfoncer. Tu as les point d'arrêt, la fenêtre variables locales et ta souris : tout le temps que tu perds à comprendre ce que fait ton code exactement, tu le récupéreras en temps de dépannage. Il faut savoir perdre pour gagner. Le but, pour moi, n'est jamais d'aller vite, mais de faire correctement.
Dans ton code, on voit que tu utilises With, plusieurs fois, de manière aussi inepte. À quoi ça sert de devoir revoir tout ton code, alors que si tu avais attendu de comprendre ce que tu faisais, tu aurais fais tes codes justes dès la première fois ?
A+
Bonsoir et merci pour ta réponse.
La page ''1e cas'' et les 2 cellules de calendrier ds l'intro répondent aux critères de ton code et ca marche super bien.
Je touche à vba depuis 2mois seulement et étant ingénieur méca je ne possède pas encore l'état d'esprit d'un programmeur comme ca pourrait etre le cas pour toi vu ta date d'inscription sur le site.
Perso je ne connaissais pas du tout la fonction Me, ni la finalité de l'activecell (que j'ai utilisé sur mon programme) qui ne comporte qu'une cellule selectionnée.
en tout ca m'apprend bcp. Thx
Petite question
Est-il possible de placer 2 programmes differents dans la même feuille se lancant par un double clic (un pour le callendrier et l'autre sur les cellules qui comptent l'année 1 + i) ?
Salut gladius et le forum
étant ingénieur méca je ne possède pas encore l'état d'esprit d'un programmeur comme ca pourrait etre le cas pour toi vu ta date d'inscription sur le site.Étant ingénieur méca, tu as déjà l'état d'esprit nécessaire. Ton seul réel problème c'est que tu es persuadé que c'est trop "complexe" pour toi.
S'il s'agissait d'un ensemble d'engrenages avec des cames ça ne te ferait pas aussi peur... alors que c'est pareil !
La seule réelle différence c'est la syntaxe, que tu ne possèdes pas encore.
Est-ce qu'un arbre à came peut entraîner fonctionnements différents de pistons différents ?Est-il possible de placer 2 programmes différent dans la même feuille se lançant par un double clic (un pour le calendrier et l'autre sur les cellules qui comptent l'année 1 + i) ?
Oui, s'il ne sont pas sur la même came.
Ici la came c'est : intersect (target, Plage).
Comme c'est sur double-clic, target ne contient qu'une seule cellule (celle qui est active).
Donc l'intersection contient soit Target si elle appartient à plage, soit rien (nothing) si elle n'appartient pas à la plage.
Tu auras un infinité de test correspondant à une infinité de plage pour déclencher une infinité de processus. Mais avec Excel, tu as toujours plusieurs possibilités :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not (Intersect(Target, [N7:O22]) Is Nothing) Then
'traitement d'un double-clic dans la plage N7:O22
End If
If Target.Address = "$G$7" Then
'traitement si le double-cilc concerne G7
End If
If Target.Address(0, 0) = "I7" Then
'traitement si le double-cilc concerne I7
End If
End Sub3 exemples, mais on peut en trouver d'autres, ça dépend simplement de l'utilisation.
À noter que l'adresse I7 est en absolu pour VBA.
A+
Effectivement ca fonctionne et merci du coup de main mais par contre tu devrais arrêter de faire des hypothèses sur les gens, par exemple :
Ton seul réel problème c'est que tu es persuadé que c'est trop "complexe" pour toi
Perso je n'aime pas trop ce délire juste parce que j'ai énoncé ma formation à dominante mécanique !!
J'ai quand même cherché/testé pendant un bon moment mais ce n'est pas trivial pour moi pour l'instant ce qui est l'intérêt des questions posté sur le forum. Comme tout, ca ne s'improvise pas.
Une bonne habitude à prendre, c'est de tester ce que l'on code pour la première fois avant de s'enfoncer.
Par contre
La seule réelle différence c'est la syntaxe, que tu ne possèdes pas encore
Oui je suis d'accord, mais c'est normal.
De plus je n'apprécie pas trop qu'on me fasse la leçon sur mon terrain de jeu en faisant allusion à des exemples par le biais de 'question-réponse' >>>> qui d'ailleurs est fausse (ou vraie à 50%):
Est-ce qu'un arbre à came peut entraîner fonctionnements différents de pistons différents ?
Oui, s'il ne sont pas sur la même came.
Et bien désolé de te décevoir mais si c'est possible et tout dépend de la forme de ta came et de l'organisation de tes pistons/soupapes. Pas de pot !!
Vois tu la méca ne se réduit pas seulement à des trains d'engrenages ou des moteurs.
Donc je maintiens pour l'instant le fait que programmer n'est pas dans la même logique que la méca.
Tu touches à vba depuis 4ans au moins (au vu ta date d'inscription) mais moi ca fait à peine 3mois et occasionnellement.
Pour info, quand une personne me sollicite, j'ai pour habitude de lui répondre sans lui faire pas la leçon.
dsl