Au secours! Aide pour un macro VBA Excel

Résolu
perlevn Messages postés 5 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis débutante en VBA Excel. Dans le cadre de mon stage, je dois faire un macro pour automatiser un calcul de coût. Mon tableau a 2 colonnes:
Dans la colonne 1, j'ai les types de véhicules.
Dans la colonne 2, j'ai le coût qui est associé
Le problème est que dans la colonne 1, je peux avoir plusieurs lignes d'un même type, avec les coûts différents; Je veux insérer les lignes quand il y a cette répétition pour pouvoir faire la moyenne du coût de ce type.

Colonne 1 Colonne 2
TYPE COÛT
A 1
B 2
B 4
C 6
Dans cet exemple; je dois insérer une ligne après la ligne 3 puis faire la moyenne du coût de B, cad (2+4)/2=3
Sachant que je connais pas à l'avance le nombre de répétitions. 9a peut être 2 comme ce cas, mais peut être 3, 4, ou 5 etc...

Merci bcp de votre aide!!!!
Configuration: Windows Vista Internet Explorer 7.0

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Tu es obligé de le présenter comme ça et obligatoirement en VBA ?
    Un tableau croisé dynamique avec toutes tes moyennes ne suffit pas ?

    eric
    2
    1. perlevn Messages postés 5 Statut Membre
       
      Bonsoir,
      Oui effectivement, t'as raison. J'ai choisi cette solution, mais je sais pas comment afficher les lignes de détails que le tableau croisé dynamque m'a fait???
      0
      1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281 > perlevn Messages postés 5 Statut Membre
         
        Bonsoir,

        Tu ne peux pas afficher tous les détails en développant comme une arborescence.
        Par contre si une valeur t'interesse plus particulièrement tu peux double-cliquer dessus, une extraction des données concernées est faite dans une nouvelle feuille.

        eric
        0
  2. melanie1324
     
    Bonjour,

    je ne peux t'aider qu'en partie parce qu'il y a un bout de code qui m'échappe :
    avant de faire ca, il faut que tuenregistres une macro et tu tries par la colonne 1. Quand c'est fait, tu ajoutes le bout de code en dessous de la ligne dim.

    sub ajoutligne ()
    dim i,j, nbre, voiture, cout as string
    i=1
    j=1
    nbre=0
    voiture =""

    cells(i,j).select
    do while selection =""
    voiture = selection
    nbre =1
    cout =0
    cells(i+1,j).select
    do while selection = voiture
    nbre=nbre+1
    i=i+1
    cout = cout +cells(i+1,j+1)
    cells(i+1,j).select
    loop
    cout = cout / nbre
    cells(1,1) 'mets la cellule ou tu veux mettre ta moyenne
    i=i+1
    cells(i,j).select
    loop

    end sub
    1
  3. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    bonsoir :)

    Range(cell(1, 1), ActiveCell.End(xlDown)).Sort Key1:=Range("A:A"), Order1:=xlAscending
    LigneAInserer = False
    For i = 1 To Right(Range("A1").End(xlDown).Address, 1)
    If Cells(i, 1) <> Cells(i + 1, 1) And LigneAInserer = True Then
    Rows(i + 1).Insert Shift:=xlDown
    Cells(i + 1, 1) = Cells(i, 1)
    Cells(i + 1, 2).Value = "=AVERAGE(B" & PremiereCellIdentique & ":B" & i & ")"
    i = i + 1
    LigneAInserer = False
    PremiereCellIdentique = ""
    Else
    If Cells(i, 1) = Cells(i + 1, 1) Then
    If PremiereCellIdentique = "" Then PremiereCellIdentique = i
    LigneAInserer = True
    End If
    End If
    Next
    1
  4. perlevn
     
    Bonjour,

    Merci beaucoup de votre aide. Je vais essayer de le faire. Je vous tiens au courant si cela fonctionne ou pas:)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. perlevn Messages postés 5 Statut Membre
     
    Bonjour,
    ajh, j'ai testé vos solutions au travail. Finalement, j'ai adopté la solution du tableau croisé dynamique. Mon seul problème est que je ne sais pas comment afficher le détail des totaux que le tableau m'a fait. AVez vous une idée?? Je vous embête encore;) je suis désolée.
    0