Programmation macro VBA excel

Résolu
Bonjour,

je suis debutante dans VBA et j'ai une macro a faire sous vba pour un fichier Excel.
J'ai un tableau avec deux colones et plusieures lignes. la premiere collone presente des referances et la deuxieme les valeures associés à ces referances.
Il faut que je remplisse une troisieme collone avec pour chaque ligne un ordre de priorité suivant des regles de pourcentage du total des valeures de toutes les referances identiques.
Exemple 1er ligne blé 100 euros a replir urgent/non urgent
2eme ligne sucre 200 euros a replir urgent/non urgent
3eme ligne blé 400 euros a replir urgent/non urgent
...
je dois attribuer par exemple une priorité urgente si le la valeur de la referance est superieure à 50 % du total de cette referance.
exemple la macro fera le total de toutes les referances sur la colone blé soit ici 500 euros
la 1ere ligne 100 euros < 50% du total 500 euros donc il mettra dans la troisieme collone premiere ligne non urgent
pûis ainsi de suite troisieme ligne troisieme collone 400 euros > 50% de 500 euros donc urgent ...
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. merci beaucoup le code marche bien j'ai réussi a m'en sortir
    1. Contributeur
      bonjour

      Comme tu veux faire une macro, en voilà une qui fonctionne quelles que soient tes informations
      Option Explicit
      
      Sub priorité()
      Dim cum As Double
      Dim i As Long, l As Long
      For l = 1 To Range("a65536").End(xlUp).Row
          cum = 0
          For i = 1 To Range("a65536").End(xlUp).Row
              If Cells(l, 1).Value = Cells(i, 1).Value Then
                  cum = cum + Cells(i, 2).Value
              End If
          Next i
          If Cells(l, 2) > cum / 2 Then
              Cells(l, 3).Value = "URGENT"
          Else
              Cells(l, 3).Value = "non urgent"
          End If
      Next l
      End Sub

      Cependant, si tu as de nombreuses références, je doute fort que tu trouves beaucoup de références URGENT car si tu n'as que 2/3 éléments, comme dans ton exemple cela fonctionne mais au-delà, difficile de faire plus de 50%.

      Tu peux facilement faire varier le niveau d'urgence " > cum / 10" par exemple sélectionnes les plus de 10%.
      1. bonjour merci d'avoir répondu
        le truc c'est que j'ai des tableau de mille lignes donc voila pourquoi je voulais faire une macro
        je pensais faire une première fois le parcours de la colonne ou je sommerais la valeur de toutes les references identiques
        et un deuxième fois ou j'attribuerais les priorités

        With wsExcel

        For i= 1 To NbLigne

        Select Case .Cells(i, 1).Value

        Case Is = "pain"
        somme1 = somme1 + .Cells(i, 2).Value

        Case Is = "beurre"
        somme2 = somme2 + .Cells(i, 2).Value

        Case Is = "sel"
        somme3 = somme3 + .Cells(i, 2).Value

        Case Else

        somme4 = somme4 + .Cells(i, 2).Value

        End Select

        Retour = MsgBox(somme1)
        Retour = MsgBox(somme2)
        Retour = MsgBox(somme3)

        Voila mon code mais quand je regarde les sommes elles sont toutes a zeros je comprend pas
        j'ai l'impression qui ne prend pas les valeurs dans les cases
        1. bonjour merci d'avoir répondu
          le truc c'est que j'ai des tableau de mille lignes donc voila pourquoi je voulais faire une macro
          je pensais faire une première fois le parcours de la colonne ou je sommerais la valeur de toutes les references identiques
          et un deuxième fois ou j'attribuerais les priorités

          With wsExcel

          For i= 1 To NbLigne

          Select Case .Cells(i, 1).Value

          Case Is = "pain"
          somme1 = somme1 + .Cells(i, 2).Value

          Case Is = "beurre"
          somme2 = somme2 + .Cells(i, 2).Value

          Case Is = "sel"
          somme3 = somme3 + .Cells(i, 2).Value

          Case Else

          somme4 = somme4 + .Cells(i, 2).Value

          End Select

          Retour = MsgBox(somme1)
          Retour = MsgBox(somme2)
          Retour = MsgBox(somme3)

          Voila mon code mais quand je regarde les sommes elles sont toutes a zeros je comprend pas
          j'ai l'impression qui ne prend pas les valeurs dans les cases
          1. Contributeur
            bonjour

            Tu n'as pas besoin de macro pour cela, tu mets en C1 cette formule matricielle à valider par ctrl+majuscule+entrée simultanées
            =SI(B1>(SOMME(($A$1:$A$65535=A1)*($B$1:$B$65535))/2);"urgent";"non urgent")

            ensuite avec la petite croix en bas à droite, tu tires ta formule vers le bas.

            Si tu mets ta formule sur une autre ligne tu mets ici =A1 =A et ton n° de ligne.