Diagram en Excel, VBA
Fermé
digit
Messages postés
4
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
20 septembre 2006
-
22 août 2006 à 20:00
sam254 - 30 nov. 2007 à 11:20
sam254 - 30 nov. 2007 à 11:20
Salut a tous,
je dois ecrire un programme avec VBA applique a Excel. Je me suis heurtee au probleme suivant: J ai un diagramm trace avec Excel et je voudrais un code VBA qui me permettra pour chaque point des Abscisse que je choisirais d avoir la valeur des ordonnees correspondantes.
C'est assez urgent svp
Merci d'avance pour votre precieuse aide
je dois ecrire un programme avec VBA applique a Excel. Je me suis heurtee au probleme suivant: J ai un diagramm trace avec Excel et je voudrais un code VBA qui me permettra pour chaque point des Abscisse que je choisirais d avoir la valeur des ordonnees correspondantes.
C'est assez urgent svp
Merci d'avance pour votre precieuse aide
A voir également:
- Diagram en Excel, VBA
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
5 réponses
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
26 août 2006 à 23:49
26 août 2006 à 23:49
Un petit exemple. Dans Feuil1 j'ai mis :
Si tu demandes une valeur d'abscisse qui figure dans les abscisses connues (p. ex. la valeur 9 en A4), on donne immédiatement le résultat de l'ordonnée : 33.
Si maintenant tu demandes l'abscisse 11, qui ne figure pas, la macro calcule une valeur intermédiaire, en faisant une interpolation linéaire. Résultat ici : 39. C'est mieux que rien ?
Si ça te va, fais les adaptations nécessaires...
A B 1 0 18 2 3 22 3 6 27 4 9 33 5 12 42 6 15 35 7 18 24 8 21 18 9 24 11 10 27 7Et cette macro en VBA :
Sub Intrapol() Dim Plage As Range ' plage des étiquettes des abscisses Dim Rang As Long ' pour renvoyer le rang de la valeur cherchée Dim Absc_Cherchée As Double ' valeur d'abscisse à rechercher Dim Absc_Trouvée As Double ' valeur d'abscisse trouvée Dim Delta As Double ' écart entre l'abscisse cherchée et l'abscisse connue inférieure la plus proche Dim Ordo_Inf As Double ' ordonnée connue immédiatement inférieure à celle cherchée Dim Ordo_Sup As Double ' ordonnée connue immédiatement supérieure à celle cherchée Dim Ecart_Absc As Double ' écart entre les 2 abscisses encadrant la valeur cherchée Dim Ecart_Ordo As Double ' écart entre les 2 ordonnées encadrant la valeur cherchée Dim Résultat As Double ' résultat de la requête '================= Absc_Cherchée = 7 ' valeur d'abscisse à fournir '================= Set Plage = Worksheets("Feuil1").Range("A1:A10") Rang = Application.WorksheetFunction.Match(Absc_Cherchée, Plage, 1) Absc_Trouvée = Plage.Cells(Rang).Value If Absc_Trouvée = Absc_Cherchée Then MsgBox "Résultat : " & Plage.Cells(Rang).Offset(0, 1).Value Else Ecart_Absc = Plage.Cells(Rang + 1).Value - Absc_Trouvée Ordo_Inf = Plage.Cells(Rang).Offset(0, 1).Value Ordo_Sup = Plage.Cells(Rang + 1).Offset(0, 1).Value Ecart_Ordo = Ordo_Sup - Ordo_Inf Delta = Absc_Cherchée - Absc_Trouvée Résultat = Ordo_Inf + (Ecart_Ordo * (Delta / Ecart_Absc)) MsgBox "Résultat : " & Résultat End If End SubLe graphique donne une petite courbe. Bon.
Si tu demandes une valeur d'abscisse qui figure dans les abscisses connues (p. ex. la valeur 9 en A4), on donne immédiatement le résultat de l'ordonnée : 33.
Si maintenant tu demandes l'abscisse 11, qui ne figure pas, la macro calcule une valeur intermédiaire, en faisant une interpolation linéaire. Résultat ici : 39. C'est mieux que rien ?
Si ça te va, fais les adaptations nécessaires...
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
23 août 2006 à 08:29
23 août 2006 à 08:29
Bonjour digit,
Ton diagramme fourni par Excel est sans doute un graphique construit à partir d'un tableau de valeurs stocké dans une feuille de calcul (ou éventuellement en table). A partir des séries de points ainsi définis, Excel les place et les relie pour former une courbe. Ça ne constitue en rien une équation.
A ma connaissance, tu ne peux pas obtenir une valeur pour un point de la courbe ne figurant pas dans le tableau (un point entre 2 étiquettes de l'axe des abscisses). Tu peux tenter une interpolation linéaire avec un calcul simple. Dans le meilleur des cas, ça restera approximatif.
Ton diagramme fourni par Excel est sans doute un graphique construit à partir d'un tableau de valeurs stocké dans une feuille de calcul (ou éventuellement en table). A partir des séries de points ainsi définis, Excel les place et les relie pour former une courbe. Ça ne constitue en rien une équation.
A ma connaissance, tu ne peux pas obtenir une valeur pour un point de la courbe ne figurant pas dans le tableau (un point entre 2 étiquettes de l'axe des abscisses). Tu peux tenter une interpolation linéaire avec un calcul simple. Dans le meilleur des cas, ça restera approximatif.
digit
Messages postés
4
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
20 septembre 2006
26 août 2006 à 14:56
26 août 2006 à 14:56
Je te remercie de ta reponse Armojax, c est exactement cela mon graphik. Je sais que cela ne forme pas du tt une equation ou une courbe continue. Et je ne cherche pas non plus des ordonnees pr des abscisses quee je n ai pas du tout.
Je voudrais tout simplement un code VBA pr pouvoir obtenir une ordonnee a partir d une abscisse ke j aurais choisi moi meme, qui biensur viendra de l une des cellules de la colonne ou se trouvent ttes les valeurs des abcisses.
Ou serait il plus facile si je travaillais avec le tableau d excel. Je veux dire si je cherchais pr une cellule precise ke j appelle abscisse, la valeur de l ordonnee correspondante, cest a dire la valeur de la colonne suivante se trouvant sur la meme ligne que l abscisse que j aurai choisi.
Si oui comment?
Merci d'avance
Je voudrais tout simplement un code VBA pr pouvoir obtenir une ordonnee a partir d une abscisse ke j aurais choisi moi meme, qui biensur viendra de l une des cellules de la colonne ou se trouvent ttes les valeurs des abcisses.
Ou serait il plus facile si je travaillais avec le tableau d excel. Je veux dire si je cherchais pr une cellule precise ke j appelle abscisse, la valeur de l ordonnee correspondante, cest a dire la valeur de la colonne suivante se trouvant sur la meme ligne que l abscisse que j aurai choisi.
Si oui comment?
Merci d'avance
digit
Messages postés
4
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
20 septembre 2006
29 août 2006 à 07:49
29 août 2006 à 07:49
Encore merci pour ton code que je trouve superbe.
Malheureusement il y'a une erreur lorsque je l'execute. Le message d erreur que je recois est le suivant:
Erreur de durée de validité "9" : Indice à l'extérieur du secteur valable et c est a la ligne du programme: "Set Plage = Worksheets("Feuil1").Range("A1:A10"). J 'ai voulu l'adapter a mon programme, cela n'a pas marche.J ai eu cette erreur.
J ai alors ouvert une nouvelle feuille où j ai ecrit presque les memes valeurs que les tiennes et j'ai biensur modifié le nom du fichier ou il le fallait ( a la place de feuill1).
Aurais tu une idee du probleme??
Je ne suis pas du ttout une experete en VBa je suis en train d'apprendre en écrivant mon programme, mais j'ai malheureusement pas assez de temps. Donc si tu as des liens web ou des noms de livres qui pourrait m'etre d une grande aide a cet effet, alors n'hesite pas stp à me les proposer.
Merci d avance et bonne journee a toi!
Malheureusement il y'a une erreur lorsque je l'execute. Le message d erreur que je recois est le suivant:
Erreur de durée de validité "9" : Indice à l'extérieur du secteur valable et c est a la ligne du programme: "Set Plage = Worksheets("Feuil1").Range("A1:A10"). J 'ai voulu l'adapter a mon programme, cela n'a pas marche.J ai eu cette erreur.
J ai alors ouvert une nouvelle feuille où j ai ecrit presque les memes valeurs que les tiennes et j'ai biensur modifié le nom du fichier ou il le fallait ( a la place de feuill1).
Aurais tu une idee du probleme??
Je ne suis pas du ttout une experete en VBa je suis en train d'apprendre en écrivant mon programme, mais j'ai malheureusement pas assez de temps. Donc si tu as des liens web ou des noms de livres qui pourrait m'etre d une grande aide a cet effet, alors n'hesite pas stp à me les proposer.
Merci d avance et bonne journee a toi!
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
29 août 2006 à 08:51
29 août 2006 à 08:51
Je n'arrive pas à provoquer ton erreur. Voici des points à vérifier :
- le nom de la feuille de calcul qui contient tes données
- la plage de cellules de tes étiquettes d'abscisses
- le type de données : j'ai défini les variables As Double pour des valeurs numériques. Si tes étiquettes sont des dates, par exemple, il faut adapter.
- les étiquettes d'abscisses sont supposées être en ordre croissant. Si elles sont en ordre décroissant, il faut mettre le dernier paramètre de WorksheetFunction.Match à -1 au lieu de 1.
- je prends les valeurs d'ordonnées dans la colonne B (colonne +1). Si ce n'est pas le cas, il faut adapter la deuxième valeur des Offset(Ligne, Colonne).
Après ça, je ne vois pas...
- le nom de la feuille de calcul qui contient tes données
- la plage de cellules de tes étiquettes d'abscisses
- le type de données : j'ai défini les variables As Double pour des valeurs numériques. Si tes étiquettes sont des dates, par exemple, il faut adapter.
- les étiquettes d'abscisses sont supposées être en ordre croissant. Si elles sont en ordre décroissant, il faut mettre le dernier paramètre de WorksheetFunction.Match à -1 au lieu de 1.
- je prends les valeurs d'ordonnées dans la colonne B (colonne +1). Si ce n'est pas le cas, il faut adapter la deuxième valeur des Offset(Ligne, Colonne).
Après ça, je ne vois pas...
digit
Messages postés
4
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
20 septembre 2006
20 sept. 2006 à 00:14
20 sept. 2006 à 00:14
Salut armojax,
J ai finalement trouvé un livre sur VBA appliqué a Microsoft Office, il m'a beaucoup aide et je dirais mm que j ai presque fini mon programme. J ai encore 2 erreurs que je ne reussi pas du tout à corriger. C'est pour cela que je t'écris une fois de plus.
La première: Erreur d'exécution9:
Index hors du secteur de validite. Ceci s'affiche a cause d'un tableau/Array que j utilise: ErgVol(j) = Valvol les valeurs de j je les modifient a chaque fois que j'ai une nouvelle valeur de Valvol. J ai initialise la valeur de j ai debut du programme.
La 2ème:
Erreur d'exécution 8: Debordement. Les valeurs de Valvol sont recherches les unes apres les autres ds une feuille de calcul d excel mais sans avoir fini je recois tjrs cette erreur.
Mon programme il est a remettre la semaine prochaine et la j avaoue que je commence a avoir peur.
Aide moi je t'en prie
Merci d avance
J ai finalement trouvé un livre sur VBA appliqué a Microsoft Office, il m'a beaucoup aide et je dirais mm que j ai presque fini mon programme. J ai encore 2 erreurs que je ne reussi pas du tout à corriger. C'est pour cela que je t'écris une fois de plus.
La première: Erreur d'exécution9:
Index hors du secteur de validite. Ceci s'affiche a cause d'un tableau/Array que j utilise: ErgVol(j) = Valvol les valeurs de j je les modifient a chaque fois que j'ai une nouvelle valeur de Valvol. J ai initialise la valeur de j ai debut du programme.
La 2ème:
Erreur d'exécution 8: Debordement. Les valeurs de Valvol sont recherches les unes apres les autres ds une feuille de calcul d excel mais sans avoir fini je recois tjrs cette erreur.
Mon programme il est a remettre la semaine prochaine et la j avaoue que je commence a avoir peur.
Aide moi je t'en prie
Merci d avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question