Programmation macro VBA excel

Résolu/Fermé
louloutte0056 - 11 janv. 2008 à 17:00
 louloutte0056 - 29 janv. 2008 à 00:05
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 ...

5 réponses

gbinforme
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 608
11 janv. 2008 à 18:01
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.
0
louloutte0056
12 janv. 2008 à 12:43
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
0
louloutte0056
12 janv. 2008 à 12:43
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
0
gbinforme
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 608
12 janv. 2008 à 17:46
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%.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
louloutte0056
29 janv. 2008 à 00:05
merci beaucoup le code marche bien j'ai réussi a m'en sortir
0