Automatiser calcul de moyenne vba excel 2007

Résolu
Goret -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Je vous contacte car je rencontre des difficultés sur mon programme (je suis débutant).

J'utilise VBA sous Excel]2007.

J'ai une feuille excel avec sur 10 lignes de données chiffrées. Et je cherche à automatiser le calcul] de la moyenne d'une ligne par l'utilisation d'une fenêtre qui permet de sélectionner la ligne à calculer (avec une listbox) et par un commandbutton (qui va ordonner le calcul de la moyenne).
Le résultat du calcul devra s'afficher dans la fenêtre sur une textbox prévue à cet effet.

Je n'arrive vraiment pas à trouver ce code, si quelqu'un pouvait m'aider ce serait génial!!

Merci d'avance

10 réponses

  1. Goret
     
    Pour info, j'ai préparé la fenêtre, il ne me reste plus qu'à trouver le code à appliquer pour la commandbox et trouver le code pour afficher le résultat sur la listbox
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Le plus "automatique" serait de mettre la formule Moyenne sur chaque ligne.
    Mais bon, si tu veux vraiment du VBA ...
    Private Sub CommandButton1_Click()
    Dim Lig As Long, ColDeb As Integer, ColFin As Integer
    Dim Tot As Double, i As Integer
        'initialiser la ligne à calculer
        Lig = 7 ' à adapter à la sélection ListBox
        'initialiser les colonnes de.. à
        ColDeb = 4: ColFin = 11
        With Sheets("Feuil1")
            For i = ColDeb To ColFin
                Tot = Tot + .Cells(Lig, i)
            Next i
        End With
        TextBox1.Text = Tot / (i - ColDeb)
    End Sub

    A+
    0
  3. Goret
     
    Merci pour ton aide, cependant, je n'arrive toujours pas à le faire tourner.
    Voici ce que j'ai complété:

    Private Sub CommandButton1_Click()
    Dim Lig As Long, ColDeb As Integer, ColFin As Integer
    Dim Tot As Double, i As Integer

    'initialiser la ligne à calculer
    Lig = ListBox1_Click

    ' à adapter à la sélection ListBox

    'initialiser les colonnes de.. à
    ColDeb = B: ColFin = IV

    With Sheets("le nom de ma feuille")
    For i = ColDeb To ColFin
    Tot = Tot + .Cells(Lig, i)
    Next i
    End With
    TextBox1.Text = Tot / (i - ColDeb)
    End Sub
    0
    1. Goret
       
      le problème vient apparemment de Lig. Je n'arrive pas à définir que la rowsource de Lig est spécifié par la listbox1.
      Merco
      0
    2. Goret
       
      au secours!
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Hummmm.. faudrait quand même que tu aprenne un peu loe VBA si tu veux t'en servir !!!
    Quel est le text de ta listbox ?
    Pour les colonnes c'est les N° que tu doit mettre, par exemple B c'est la colonne 2
    A=1, B=2, C=3,....AA=27....IA=235...
    With Sheets("le nom de ma feuille") c'est le nom de l'onglet de ta feuille
    Sur quel ligne se trouve tes dix lignes ?
    0
  6. Goret
     
    Ok merci j'ai bien capté pour les colonnes.
    Et ok pour la feuille
    Mes lignes se trouvent sur les lignes de 2 à 11.
    Dans le listbox, j'ai pu entrer les bonnes lignes dans rowsource en mettant (2:11).
    J'ai l'impression que le problème vient de Lig=, je n'arrive pas à faire en sorte que la ligne à choisir est définie par cette listbox...
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Eh oui, et au final tu a fait comment ?
      0
    2. Goret
       
      Voilà, et j'ai en plus fait en sorte d'afficher un message d'erreur au cas où aucun choix n'est fait:
      Private Sub CommandButton1_Click()

      Dim a As Integer
      Dim Bool As Boolean

      a = ListBox1.ListIndex + 2

      If a >= "2" Then
      Bool = True
      End If

      If Bool = True Then

      TextBox1.Text = Application.WorksheetFunction.Average(Range(Cells(a, 2), Cells(a, 255)))

      Else
      MsgBox "Veuillez faire un choix", vbCritical

      End If


      End Sub
      0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Lig = ListBox1.ListIndex + 2
    0
  8. Goret
     
    Salut,

    Merci pour ton aide. J'ai finalement trouvé (il m'aura fallu 4h environ) .
    0
  9. Profil bloqué
     
    Bonjour,
    Le plus "automatique" serait de mettre la formule Moyenne sur chaque ligne.
    Mais bon, si tu veux vraiment du VBA ...

    Private Sub CommandButton1_Click()
    Dim Lig As Long, ColDeb As Integer, ColFin As Integer
    Dim Tot As Double, i As Integer
    'initialiser la ligne à calculer
    Lig = 7 ' à adapter à la sélection ListBox
    'initialiser les colonnes de.. à
    ColDeb = 4: ColFin = 11
    With Sheets("Feuil1")
    For i = ColDeb To ColFin
    Tot = Tot + .Cells(Lig, i)
    Next i
    End With
    TextBox1.Text = Tot / (i - ColDeb)
    End Sub

    J'ai testé ceci à l'instant et personnellement sa marche très bien pour ma part et vous ?
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Ce serait plus simple..
    Supprimer le bouton (plus besoin de tester si sélection faite)
    et mettre l'affichage directement dans l'événement de la listbox.
    Private Sub ListBox1_Click()
    Dim A As Integer
        A = ListBox1.ListIndex + 2
        TextBox1.Text = Application.Average(Range(Cells(A, 2), Cells(A, 255)))
    End Sub

    A+
    0