Diagram en Excel, VBA

digit Messages postés 4 Statut Membre -  
 sam254 -
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

5 réponses

  1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Un petit exemple. Dans Feuil1 j'ai mis :
          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   7
    Et 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 Sub
    Le 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...
    2
  2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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.
    0
    1. digit Messages postés 4 Statut Membre
       
      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
      0
  3. digit Messages postés 4 Statut Membre
     
    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!
    0
  4. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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...
    0
    1. digit Messages postés 4 Statut Membre
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sam254
     
    slt Armojax

    excellent le programme

    moi je voudrais également faire une recherche sur les ordonnées, et s'il ne trouve pas, qu'il me fasse également une moyenne des valeurs
    comment faire ??
    0