Tracer des grpahes avec VBA
Bonjour,
J'ai une base de références, et pour chaque réf j'ai 8 vitesses (100%,90%... mini) et pour chaque vitesse on informe 5 paramètres (Hmt, P0tot, P1tot, P2, N) en fonction du débit Q.
Je souhaite tracer 5 graphes ( (Q,Hmt) , (Q,P0tot), ( Q,P1tot) , (Q,P2), (Q,N) ) pour chaque réf.
Dans le premier graphe (Q, Hmt) on aura 5 courbes la courbe 100%, la courbe90% ... la courbe mini
Pour le deuxième graphe pareil on aura 5 courbes la courbe 100%, la courbe90% ... la courbe mini ... etc ....
Pour avoir les valeurs des courbes, il faudrait faire avec une valeur cible, et trouver la valeur de Q pour que Hmt soit égale à 0 ça sera Qmax. à partir de ce Qmax on va créer les valeur de la courbe c'est à dire :
On va faire 10%Qmax et trouver les valeurs Hmt P0tot, P1tot, P2, N
20%Qmax et trouver les valeurs Hmt P0tot, P1tot, P2, N
...
120%Qmax et trouver les valeurs Hmt P0tot, P1tot, P2, N
On aura à la fin un tableau de données et on pourra tracer les 5 graphes avec 8 courbes pour chaque référence.
Une fois arriver là, il faudra automatiser le travail grâce à Vba, e(t faire un menu déroulant pour que à chaque fois on choisit une référence ces graphes soient tracer automatiquement et le tableau des valeurs se met à ajour à partir de la nouvelle valeur cible.
Je compte sur votre aide, je sais ce n’est pas un travail facile et qui prend du temps mais je compte sur la générosité et le sens du partage des experts sur le forum qui m'ont jamais déçu
Je reste à disposition pour vos questions
Je vous remercie d'avance
Messin
Autant je veux bien chercher a resoudre un probleme precis (quand je sais faire
Je pense que des precisions dans ce que tu voudrais et ne saurais pas faire aideraient
Bonjour,
Tout ce que je ne sais pas faire c'est la partie Vba, et non ce n'est pas le projet en entier juste pour en arriver à la base que j'ai fourni que 3 lignes parmis des centaines m'a pris 2 mois...
Peut être qu'il faurait faire tout cela étape par étape...
1ère étape :
A l'aide vba chercher le Qmax pour chaque ref ( faire valeur cible et trouver Q pour que Hmt=0)
2ème étape :
creer, dans une case, un menu déroulant qui permet de choisir la réf voulue, et une fois choisi, creer un tableau de valeurs comme sur le fichier join sur le premier message( 10% Qmax,20%Qmax..Qmax) pour chaque vitesse.
3ème étape :
une fois la ref choisi et le tableau crée , tracer les 5 graphes et a chaque fois qu'on choisi une ref sur le menu deroulant les graphes se met à jour...
Merci
Messin
Je pense que des precisions dans ce que tu voudrais et ne saurais pas faire aideraient[/quote]
Salut,
Je ne me suis occupé que de la première partie de ton problème. J’ai placé une macro qui calcule les valeurs cible des colonnes «Hmt».
Pour certaines cellules, aucun résultat n’est trouvé (la valeur Htm n'est pas à zéro). A première vue, si tu utilises l’option «Valeur Cible» manuellement sur ces mêmes cellules, ça ne passe pas non plus ; après x itérations, Excel indique qu’il n’a pas trouvé de résultat.
Il y a bien la possibilité d'aller modifier les paramètres concernant les itérations dans les options (voir image ci-dessous), mais je ne connais pas trop
Ca te permet d’avancer ?
Ensuite, ton tableau récapitulatif, tu le veux vraiment en dessous ou est-ce que le nombre de lignes du tableau du haut est variables et qu’il peut s’allonger vers le bas ?
J’ai déjà travaillé sur ce fichier, il me semble. Pourquoi n’y as-tu plus les anciennes macros ?
A te relire (sur notre fil autre également
Bonjour Yvouille,
Tout d'abords ça fait plaisir de te voir sur ce fil
Effectivement le fichier que j'ai fourni contient que 3 références, le but c'était de simplifier le travail pour permettre aux gens qui se lancent dans ce fil de mieux comprendre ce que je veux, ci-joint le fichier complet.
Pour l'emplacement des tableaux et graphes il sera à droite du tableau des références car le tableau risque d'être incrémenter par de nouvelles références donc il faudrait prévoir ça dans la macro. (Voir le fichier)
Tout d'abords il faut créer une case ou il y'aura une liste déroulante, qui va permettre soit de choisir une référence et une fois la référence choisie faire les étapes que j'ai cité dans le dernier post.
Voici les étapes :
1/ liste déroulante pour choisir la référence (la case est déjà prête dans le fichier mais le choix d'emplacement peut être modifier à toi de voir le mieux
2/ calculer la valeur cible (valeur de Q quand H=0), cette valeur c'est Qmax et doit être placer automatiquement dans les 8 tableaux, car à partir de cette valeur qu'on va créer les tableaux.
remarque : dans les tableaux c'est marqué 10%Qmax,20%Qmax ... Qmax(c'est là ou doit être placer la valeur cible calculée) , 120%Qmax, il faut supprimer 10%Qmax,20%Qmax et les calculer une fois Qmax connue ( valeur cible).
3/à partir des relations existantes déjà dans tableau des références entre les 5 paramètres (Hmt, P0, P1, P2, N) et Q, remplir les 8 tableaux qui vont permettre de tracer les graphes.
4/ une fois les tableau remplis il ne reste plus qu'a tracer les 5 graphes (Q,Hmt) , (Q,P0) , (Q,P1), (Q,P2), (Q,N)
Merci Beaucoup pour ton aide
Messin
http://cjoint.com/13nv/CKsjAe54zXr.htm (trop lourd pour le forum)
Salut Messin,
Je t’ai présenté un travail – le placement de valeur cible dans les colonnes E, K, Q, etc., - mais tu ne me dis pas grand-chose à ce propos. Me suis-je complètement trompé, ne voulais-tu pas modifier ces cellules ?
De plus, tu ne me dis rien à propos de ces valeurs cible qui ne sont pas trouvées. Est-ce gênant pour toi ? As-tu essayé de calculer toi-même ces valeurs cible par l’option Excel ? As-tu une autre solution ?
J’ai vaguement compris – dans ton explication passablement embrouillée – que tu désirais pouvoir choisir une référence dans la cellule BC16 (si tu l’avais nommée, je n’aurais pas dû la chercher un bon moment) et que 8 tableaux se remplissent en fonction de cette référence dans les colonnes BD à BI.
Est-ce seulement dans ces colonnes BD:BI qu’il faut calculer les valeurs cible ?
Evite de placer tes informations à plusieurs endroits. L’idéal est le plus souvent de les placer sur ton fil. Si tu utilises les bonnes références aux fichiers, aux feuilles, aux plages de cellules, c’est souvent très compréhensible.
Evite également de placer un fichier qui ne correspond pas à la réalité ; ça génère très souvent du travail inutile.
Ne brulons pas les étapes. Liquidons les problèmes jusqu’à cette étape et on verra plus tard pour la suite. Il me semble que tu avais compris qu’en voulant en faire trop à la fois, on n’avançait parfois pas du tout.
A te relire.
Bonjour Yvouille,
c'est pas gênant le placement des valeurs cibles dans les colonnes E, K, Q etc.. mais de toute façon ces valeurs cibles vont être copier-coller dans le tableau donc on pourra remettre les colonnes E,K,etc à 0.
J'ai essayé de calculer que quelques-unes mais pas toutes, je pense le problème vient du fait que la courbe peut passer plusieurs fois par 0 donc je pense il faudrait imposer, pour le calcul des valeurs cible, de prendre la première valeur de Q pour la quelle h=0 en partant de 0 car elle pourra s'annuler plusieurs fois après mais si on prend la première fois qu'elle va s'annuler je pense on aura des valeurs plus cohérente.
J'ai réfléchi aussi pour simplifier le travail, et on va se contenter de remplir la valeur cible que dans le premier tableau et que dans la case BD30, les autres débits vont être calculés automatiquement grâce à des formules (voir fichier colonne BD)
Pour la liste déroulante, oui c'est bien dans la case BC16 que je veux la placer (je reste ouvert à toute proposition d'emplacement mieux que celle que j'ai proposé), et fais comme te semble le plus facile parmi les deux choix :
* Créer une liste déroulante qui permet de choisir une référence et en fonction de cette référence remplir les tableaux.
* deuxième choix faire une liste déroulante qui donne le choix aux numéros de ligne, c'est à dire on choisit un N° de ligne et les tableaux se remplissent en fonction des données qui se trouvent dans chaque lignes.
Donc pour organiser le travail je vais essayer de lister les étapes et d'expliquer au maximum.
1/ calculer les valeurs cibles que dans la colonne E (que pour la vitesse 100%) les autres vitesses vont être calculé grâce à des formules déjà placer dans les 8 tableaux dans la colonne BD.
2/une fois les valeurs cibles calculées, une fois on choisit la référence/Ligne dans la liste déroulante, il faut que cette valeurs cible (calculée dans la colonne E) soit rapportée dans la case BD30, et tous les restes des débits dans les 8 tableaux vont être rempli grâce au formules déjà rentrées.
3/ Une fois les débits rentrées, il faut remplir les autres paramètres du tableau, pour cela on va se servir des relations existante déjà dans le tableau des références.
En fonction de la référence choisie dans la liste déroulante, on va :
* copier les formules dans les colonnes F à J (100%) et les coller dans les 10 lignes du 1er tableau (c'est à dire on copie les 5 cases et on les colle 10 fois, une fois la première ligne du 1er tableau, une fois la 2ème ligne du 1er tableau ...)
*Copier les formules dans les colonnes L à P (90%) et les coller 10 fois dans le 2ème tableau (tableau90%)
Etc. ...
*copier les formules dans les colonnes AV à AZ et (mini) et les coller 10 fois dans le 8ème tableau.
Une fois arrivé là, il reste plus qu'à tracer les 5 courbes, mais je donnerai les détails une fois arrivé à cette étape.
J'avoue que l’explication est longue et parait difficile mais, si on comprend c'est vraiment très basique, le plus dure dans tout ça c'est calculer les valeurs cible dans le tableau des références ensuite c'est juste du copiage/collage en fonction du choix dans la liste déroulante.
http://cjoint.com/13nv/CKtjV7VoAms.htm
Merci Beaucoup
Messin
Re bonjour,
Juste une petite remarque, pour la liste déroulante c'est mieux si c'est la reference direct qui est choisie et pas le N° de ligne.
Merci
Messin
Salut,
Avec tes maudites cellules fusionnées dans les colonnes B à D, je me suis passablement embêté ! Il y a tellement de manière d’éviter ces cellules fusionnées – qui sont un véritable poison pour les macros, les références aux noms, etc. – qu’il vaut mieux prendre l’habitude de ne pas le faire. Dans cet exemple, si tu avais écrit tes valeurs dans la colonne B, que tu avais élargi cette colonne et que tu avais centré tes données, le résultat serait le même.
J’ai maintenant placé une première macro derrière le bouton en place afin de calculer les valeurs cibles de ta colonne F (en fait jusqu’à maintenant je me suis trompé ; les valeurs cible étaient cherchées pour les colonnes F, L, R, etc., en modifiant les données des colonnes E, K, Q, etc.). Je n’ai pas tout compris tes explications au sujet de ces valeurs cible, par contre je peux t’informer que chez moi Excel effectue 100 itérations et abandonne si le résultat voulu (dans notre cas la valeur 0 dans la colonne F) n’est pas trouvé. Raison pour laquelle je t’ai indiqué qu’il y avait éventuellement la possibilité de modifier le nombre d’itérations dans TES options Excel.
Attention : si tu vois des ########, il y a quand même des valeurs derrière (visibles dans la barre de tâches).
J’ai remarqué que si tu lances plusieurs fois de suite ma macro, les résultats sont parfois affinés. Ce n’est pas toujours visible - à cause des chiffres après la virgule invisibles à l’écran – mais il y a quand même des résultats différents. Certaines solutions ne sont toutefois jamais trouvées.
Une liste déroulante a été placée sur la cellule BC16 et une deuxième macro (événementielle) est déclenchée automatiquement lorsque tu modifies cette cellule, macro qui va rechercher la valeur correspondante dans la colonne E et qui la place en BD30.
Merci de m’indiquer si le travail jusque-là te convient et si l’on peut aller de l’avant ou si l’on doit d’abord résoudre les problèmes en cours. Inutile par contre, comme tu l’as fait sur notre autre fil, de m’indiquer que tu vas me répondre d’ici quelques heures. Un tel message est nécessaire que si tu ne donnes plus de nouvelles pendant plus de 2 à 3 jours.
Cordialement.
NB : Evite également ces messages par épisode. Je suis en train de préparer ta réponse et tu mets un complément d'information entre deux
Re bonjour Yvouille,
Jusque la c'est exactement ce que je voulais sur le principe.
Concernant le problème des valeurs en ##### je pense que la valeurs cible que calcul la macro n'est pas la première car quand tu vois la valeurs de ces ###### c'est des chiffres enorme ... je pense la solution c'est de dire qu'il prend la première valeurs pour laquelle H=0 car il peut y'en avoir plusieurs et donc on ne sait pas laquelle il prend et c'est justement quand tu lance la macro plusieurs fois il finit par tomber sur la valeurs voulue. Sinon oui c'est exactement ce que je voulais faire dans cette première étape.
La prochaine étape, c'est remplir les autres paramètres (Hmt,P,P1,P2,N) de la manière décrite dans mon dernier post.
J'aimerai juste avoir une explication pour le fonctionnement de la deuxième macro qui s'enclenche, et le EQUIV(BC,B:B,0) dans la case CA1.
Merci beaucoup,
Messin
Salut,
Normalement j’ai complété la macro selon tes souhaits ; les tableaux des colonnes BD:BI sont maintenant complétés.
J’aurais voulu utilisé l’équivalent de la fonction EQUIV dans mon code (voir mon essai avec MATCH dans le code), mais il y a quelque chose qui cloche. J’ai donc choisi la solution de facilité et ai placé une formule dans la cellule CA1 qui recherche à quelle ligne est la référence indiquée dans la cellule BC16.messin57000 a écrit :J'aimerai juste avoir une explication pour le fonctionnement de la deuxième macro qui s'enclenche, et le EQUIV(BC,B:B,0) dans la case CA1.
Merci de me donner une réponse sur notre autre fil afin que je puisse tenir Dan au courant.
J'ai laissé une confirmation dans une MsgBox à la fin de la macro (Texte "C'est fait") qui m'avait été utile durant mes essais, mais on va pouvoir l'enlever dès que tu veux.
Bonnes salutations.
Bonjour Yvouille,
Merci Pour ton explication
Oui parfait les tableaux se remplissent exactement comme je le voulais les graphes des fois quand je les ai tracés font n'importe quoi car moi ce que je souhaite c'est que une fois la courbe passent par 0 la courbe s'arrete mais des fois, pour quelques références, la courbe passe par 0 descend dans le négatif et repasse par 0... je ne sais pas s'il y'a moyen d'éviter cela et que le graphe s'arrete une fois il passe par 0 la première fois (Graphe (Q,H) ). je remets le fichier (fichier 1) avec les graphes ( exemple Helix Ve 407 )
Par contre j'ai essayé d'appliquer tes macros et les adapter sur un autre fichier pour la même cause, (calculer les valeurs cible, remplir un seul tableau), pour la macro valeur cible j'arrive bien à la faire marcher en adaptant les lignes et les colonnes dans ta macro, par contre pour créer la liste déroulante et remplir le tableau ça marche beaucoup moins bien.
Parce que à ce que j'ai compris la macro se déclenche avec le choix dans la liste déroulante mais par contre comment créer la liste déroulant?
Je te fais joindre le fichier (fichier 2), c'est exactement la même chose j'ai essayé d'adapter tes macros a ce fichier joint.
Fichier 1 : http://cjoint.com/13nv/CKvk6U7znZ9.htm
Fichier 2 : http://cjoint.com/13nv/CKvkXTnLMqL.htm
Merci beaucoup pour ton aide
Messin
Salut,
messin57000 a écrit :je ne sais pas s'il y'a moyen d'éviter cela et que le graphe s'arrete une fois il passe par 0 la première fois
Je n’en ai aucune idée. Jusqu’à maintenant l’option ‘Valeur-cible » m’a toujours donné satisfaction et je n’ai jamais eu besoin de trop me pencher sur ses problèmes d’utilisation. Eventuellement que tu devrais essayer d’ouvrir un autre fil pour cela. Moi je ne peux plus trop t’aider sur ce coup-là.
messin57000 a écrit :mais par contre comment créer la liste déroulant?
Dans le dernier fichier fourni, sous ‘Formules\Gestionnaire des Noms’ j’ai saisi les références à une nouvelle liste grâce à la formule de base =DECALER(Feuil1!B14;0;0;NBVAL(Feuil1!B:B);1). Si tu veux réutiliser cette formule pour un autre fichier, tu dois adapter le B14 en fonction de la première valeur à prendre en compte et B:B en fonction de ta colonne.
Ensuite tu places une ‘Validation de données’ sur la cellule de ton choix (par ‘Données\Validation des données’), tu y ‘autorises’ une ‘Liste’ et tu indiques ta liste créée ci-dessous en tant que ‘Nom’ sous ‘Source’.
A te relire.
Re bonjour Yvouille,
Merci pour ton explication, j'ai réussis à creer ma liste déroulante.
Pour la suite de la macro j'ai quelques questions :
Dans mon nouveau fichier j'ai que 3 paramètre à rapporter et par conséquent un seul tableau.
Voici comment j'ai changer la macro mais ça ne marche pas comme je l'ai souhaité :
12 If Not Application.Intersect(Target, Range("J11")) Is Nothing Then 'J11 la ou est placé ma liste déroulante
' xx = Application.WorksheetFunction.Match(Range("J11"), Range("D.D"), 0)
xx = Range("CA1").Value
Range("J24") = Cells(xx, 5) " La case ou je dois rapporter les valeurs cible
For i = 6 To 8 ' De la colonne F à la colonne H (j'ai supprimé le 6 a 48 step 6)
j = i / 6 * 13 + 8 ' cette partie la je ne sais pas trop comment l'adapter pourquoi le i/6*13? le +8 on va le supprimer car il n'ya pas 8 vitesse?
Pour la partie suivante il n'ya pas besoin de créer une boucle car un seul tableau donc je garde que la partie soulignée ?
'For k = 1 To 10
Range(Cells(xx, i), Cells(xx, i + 2)).Copy Destination:=Range("K" & j )
'Next k
Next i
Merci pour ton aide
Messin
Re-bonjour,
Peux-tu me fournir le fichier causant problème avec ton essai de macro, s'il-te-plait ?
Bonnes salutations.
Salut,
Tout d’abord – puisque c’est une macro événementielle - elle doit être placée dans le code de la feuille et non pas dans un module. Je l’ai donc déplacée dans le code de la Feuil1(50HZ).
Ensuite ma macro fait référence à une cellule CA1 dans laquelle tu dois avoir une formule (je t’ai déjà expliqué pourquoi) ; j’ai donc placé la formule nécessaire dans cette cellule.
Et ensuite, tu as essayé un peu n’importe comment d’adapter ma macro, mais comme tes deux fichiers ne sont absolument pas identiques, ça donne vraiment n’importe quoi. Dans le fichier ci-joint, tu trouveras une macro adaptée.
Cordialement.
Bonjour Yvouille,
Tout d'abords merci pour ton aide.
Je ne suis pas au courant de l'histoire de macro événementielle, et où se trouve le code de la feuille ou doit être placée la macro? Car je dois l'appliquer pour l'onglet (60HZ) aussi.
Aussi, j'ai essayé d'exécuter la macro qui calcul les valeurs cible, et ça prend beaucoup de temps maintenant qu'on a ajouté la nouvelle macro événementielle.
Cordialement
Salut,
Une macro événementielle est une macro qui se déclenche automatiquement lors d’un événement quelconque. Ici j’ai utilisé l’événement « Changement sur la feuille ». Je n’ai alors bien entendu pas pensé qu’à chaque fois qu’une nouvelle valeur cible est calculée, la macro événementielle est elle aussi déclenchée. Afin de remédier à ce problème, il faut modifier le code « Valeurs_Cibles » en empêchant les macros événementielles à son lancement puis en les autorisant à nouveau juste avant la fin à l’aide de l’instruction « Application.EnableEvents ». Voici donc ce code modifié :
Sub Valeurs_Cibles()
Dim i As Integer
Application.ScreenUpdating = False
Application.EnableEvents = False
For i = 10 To Range("D" & Rows.Count).End(xlUp).Row
Cells(i, 6).GoalSeek Goal:=0, ChangingCell:=Cells(i, 6).Offset(0, -1)
Next i
Application.EnableEvents = True
End SubEn ce qui concerne le code événementiel, il est placé dans le code de la feuille, c’est-à-dire que tu dois double-cliquer sur le nom de la feuille dans l’explorateur VBA pour le voir. Ce code porte le nom de l’évènement qui le déclenche, soit ici « Worksheet_Change » :
Afin d’utiliser cette macro sur une autre feuille, tu peux la copier-coller dans le code de cette autre feuille. N’oublie cependant pas que tu auras également besoin d’une formule dans la cellule CA1 de cette feuille ainsi qu’éventuellement une ou deux modifications à faire en plus.
Parfois, au lieu de copier-coller 20 fois la macro dans 20 feuilles, il est plus facile d’écrire une macro – modifiée en conséquence - dans ThisWorkbook (à la suite de la liste des feuilles dans l’explorateur). Mais si tu as seulement 2 feuilles, fais donc comme indiqué précédemment.
A te relire.
Bonjour Yvouille,
Parfait j'ai réussis refaire la même chose pour la feuille 60HZ concernant le remplissage de tableau.
Par contre pour le calcul des Valeurs cibles, même si j'ai effectué la modification dans la macro, c'est toujours le même problème quand je lance la macro elle mouline sans résultat... alors qu'avant une fois je clique sur le bouton valeurs cibles toutes les valeurs sont calculée et rapidement... je ne sais pas d'où vient le problème.
Voici le fichier que j'utilise.
Cordialement