Automatiser calcul de moyenne vba excel 2007 [Résolu/Fermé]

- - Dernière réponse : lermite222
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
- 20 nov. 2010 à 14:12
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
Afficher la suite 

10 réponses

0
Merci
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
Merci
Aidez moi s'il vous plaît! Merci!
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
1023
0
Merci
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
Merci
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
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
au secours!
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
1023
0
Merci
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
Merci
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...
lermite222
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
1023 -
Eh oui, et au final tu a fait comment ?
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
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
1023
0
Merci
Lig = ListBox1.ListIndex + 2
0
Merci
Salut,

Merci pour ton aide. J'ai finalement trouvé (il m'aura fallu 4h environ) .
0
Merci
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 ?
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
1023
0
Merci
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+