Somme VBA

Résolu/Fermé
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010 - 28 janv. 2010 à 17:14
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 1 févr. 2010 à 16:25
Bonjour tout le monde,

Je souhaiterai écrire une somme en vba. Voila les paramètres :
sur ma feuille active en colonne C et E j'ai des identifiants.

Il s'agit toujours d'un même identifiant qui a une relation avec un autre identifiant. Par contre l'identifiant de référence est parfois en C parfois en E (en "C" il achète, en "E" il vend). Mais sur une même ligne il est obligatoirement présent.

en colonne O j'ai un montant.

Je cherche à avoir la somme (toute position confondue) que l'identifiant de référence(=MaCellule.Value) peu avoir avec les autres identifiants.

Pas très clair hein ? Mdr.

En sachant que parfois j'ai des lignes vides.

Je m'y suis un peu essayé mais je bloque un peu :

While cells(i,15)<>""

IF C7<>Macellule.value Then
P7='la je voulais mettre une couleur, qui serait toujours la même couleur pour l'identifiant présent en D"i" ("i" étant mon numéro de ligne).

Ensuite faire une somme de chaque valeur affecté à une couleur (avec offset par ex pour récupérer la valeur en D).


Mon pb est qu'une fois que j'affecte une couleur à P7, comment lui faire comprendre pourla ligne suivante non vide que si l'identifiant (non référant) est le même alors mettre la même couleur, sinon prendre la couleur suivante (je sais qu'il existe un numéro par couleur, c possible de l'incrémenter à chaque boucle ?)


Merci pour l'attention !

18 réponses

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 17:28
euh...une autre question : les sommes, on les affiche où ? sur une feuille recap ? sur la meme feuille (ds le tableau ou ailleurs...) ?
jte propose de faire un truc comme ça :ds la colonne intermédaire tu mets cette formule (ou l'inverse moi j'ai commencé par la lettre la plus bas ds l'alphabet) =SI(C7>E7;E7&C7;C7&E7) puis tu tries sur cette colonne et tu inseres des sous-totaux(le tout en code bien évidemment)...c bon pour toi ?
1
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 10:11
Up

x)
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 10:38
Salut,
bon, sans voir le fichier c'est pas super simple...
mais si j'ai bien compris tu peux faire un boucle qui parcourt ton fichier et somme progressivement les montants :
derlig = range("O65536").End(xlup).row
ref = tacellule.value
som = 0

for i = 2 to derlig
If Range("C" & i).value = ref or Range("E" & i).value = ref then
som = som + range("O" & i).value
end if
next i

msgbox som

J'ai ecrit ça direct ds le post, sans tester mais c'est l'idée.....
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 11:49
Salut tompols,

merci pour ta réponse, si j'ai bien compris ton code, à la fin j'aurai som = la somme de toutes les montants en "O".

Or le montant en "O" peut correspondre à une intéraction entre mon identifiant principal*, mettons identifiant "Z", et les identifiants tiers, mettons, A, B, ou, C, ..., x. Le truc c que Z, sur une même feuille, peut intéragir plusieurs fois avec le même identifiant, et c'est cette somme qu'il me faut (une sorte de "net" d'intéraction).

en gros mon code devra setter le tiers comme étant A (ou B, ou C, ...,x) enregistrer le montant en 0 correspondant donc à la première relation (Z & le tiers setté"). Ainsi de suite. puis récolter les montants enregistrés pour chaque intéractions, et les sommer.

Ce serait plus clair avec un fichier joint, pero no lo se como hacerlo :) !



* (macellule.value, que j'ai déclaré comme étant un Range, qui me crée une feuille pour chaque identifiant, de plus, lorsque je suis sur une feuille, le nom de ma feuille correspond à l'indenfiant principal de la feuille, grace à macellule.value). Ainsi je repère sur chaque feuille mon identifiant principal grâce à Macellule.Value (qui peut être A, B, ou C ... ou x, chaque feuille se nommant ainsi A, ou B, ou C, .... ou x). Sur la feuille A, je peut voir toutes les intéraction de A avec tous les autres identifiant (A éxclus, ce dernier ne pouvant avoir de relation avec lui même [la nature est bien faite qd même :) mdr].
0

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

Posez votre question
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 12:13
Re,
"Ce serait plus clair avec un fichier joint, pero no lo se como hacerlo :) ! " oui, oui , je confirme (là jsuis pas sur d'avoir tout saisi) => www.cjoint.com ;)
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 12:23
C'est exellent ce site :)


http://www.cijoint.fr/cjlink.php?file=cj201001/cij6sbu0kG.xls



:)
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 12:25
Bon je me rends compte que je me suis gouré sur les fleches :), mais la somme est bonne (j'espère). l'important étant de faire passer la substance de mon pb, cela est fait (j'espère).

ps : remplacer mail par main ! :)
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 12:55
pas de souci, j'avais bien vu pour les fleches et "mail" ;)
donc si je resume, tu voudrais obtenir la somme des valeurs en O pour chaque couple (la position est elle importante genre AZ ou ZA) ?
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 13:43
Oui je voudrais obtenir la somme des valeur en O pour chaque couple, et la position n'est pas importante !


:) :) :) :) :)

MErci
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 13:45
J'avais pensé à allouer une couleur pour la 1ière relation, puis incrémenter la couleur pour la relation suivante, puis faire la somme de chaque couleur et afficher chacune d'entre elle en bas de usedrange.

Mais pour l'écrire c une autre paire de manche !
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 16:49
Re,
tu teins absolument à faire ça en code, moi j'm'en sors avec juste une formule dans une colonne intermédiaire pour récuperer le couple puis apres des sous-totaux ou meme un tcd, ça marcherait pour toi ? sinon la piste avec les couleurs j'y crois pas du tout, jpense plutot soit à un truc avec une/des variables tableaux, soit la construction de la colonne intermédiaire via code pour obtenir le couple puis utilisation de worksheetfunction ou aute....
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 17:21
La fin du code se termine par une instruction envoyant des mails automatiquement, l'utilisateur n'a donc pas le temps de changer la feuille.

par contre, on peut via vba inserer un code dans une cellule (colonne intermédiaire,ça je sais faire :)

Par exemple dans une colonne intermédiaire (mettons G) concaténer Z & A en mettant toujours, Z en première position (par ex ne jammais afficher BZ, mais plutot ZB)

puis un code qui mettrais la somme pour la première relation en P, la seconde en Q, etc, à la fin on n'a plus qu'a sommer les colonnes en question, un truc un peu comme ça (je l'écris à la volée, je sais c pas très propre).

sub xxx()
Dim i as variant ' i étant un identifiant quelquonque
dim a as long ' A étant le numéro de ligne
dim m as long 'm étant mon offset
dim NbLignes as integer 'pour compter mon nombre de ligne

a=6 'première ligne
m=0 'rang de mon offset
NbLignes = Cells(Rows.Count, "W").End(xlUp).Row

For each "Z"i in Range ("G6": Range("G65536").End(xlUp).Row)
Range(O;a).offset(0,m).value=Range(O;a)
m=m+1
next

Application.Sum(Range(column(16,Nblignes)
Application.Sum(Range(column(17,Nblignes)
...
end sub
Bref je ne suis pas très doué pour écrire vous l'auriez compris, mais un truc dans ce style !
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 18:03
kikou,

petit test manuel, et ça roule, pour une colonne A intermédiaire.

Du coup je pense qu'il ne reste plus qu'a insérer une ligne lorsque A9<>A10, et sommer à chaque insertion de ligne.

C super cool.

"les sommes, on les affiche où ?" : sur la même feuille juste en dessous (vers "c du fait main").


Je vais essayer d'écrire le code et je le poste d'ici une heure je pense (je bosse sur deux pb en mm tps, la partie du code qui demande d'envoyer un mail automatiquement fonctionne [cad les mails partent] mais j'arrive pas à renseigner le corp du message, si une fois j'y suis arrivé avec du texte mais je ne me souvient plus comment, l'essentiel serait d'avoir un copie de la page en cours, et ça, ça veut pas).
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
29 janv. 2010 à 18:16
re,
ok jte laisse écrire le code pour l'instant moi jvais boire une biere de fin de semaine :)
pour l'histoire A9<>A10 et inserer une ligne, regarde du coté de la fonctionnalité excel "sous-totaux", ça lfait tout seul (menu données\soustotaux, méthode Subtotal en vba)
jrepasse plus tard....
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
29 janv. 2010 à 18:18
ok merci pour l'info,


là je suis au bureau, je vais rentrer chez moi et poster çe week end !


:)

Très bonne soirée à toi !
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
1 févr. 2010 à 15:42
re,

Comme promis le code,

!! : j'ai effectué des modifications dans la structure du tableau, par rapport au fichier joint j'ai supprimé une colonne, ainsi que les lignes 1 à 6. Du coup ma première colonne utilisée et "B", et ma première ligne est 1.

Ps : sur mon fichier le sous total ne fonctionne pas à 100 %, à coté de la cellule concerné j'ai un petit point d'exclamation qui m'indique que la formule ne prend pas en compte les cellules adjacente, je suis obligé de mettre à jour la formule manuellement, il y a t il un moyen de mettre à jour automatiquement ?

:)


Voici le code :

Sub test()

Dim n As Long
For n = Cells(65356, 2).End(xlUp).Row To 1 Step -1
If Cells(n, "B").Value <> "" Then
If Cells(n, "B").Value <> ActiveSheet.Name Then
Cells(n, "A") = ActiveSheet.Name & Cells(n, "B").Value
Else
Cells(n, "A") = ActiveSheet.Name & Cells(n, "D").Value
End If
Else
Cells(n, "A") = ""
End If
Next n

ActiveSheet.UsedRange.Select
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
Replace:=False, PageBreaks:=False, SummaryBelowData:=True
End Sub

Bonne journée
0
Jabba the Hutt Messages postés 32 Date d'inscription vendredi 22 janvier 2010 Statut Membre Dernière intervention 2 août 2010
1 févr. 2010 à 15:59
re,

concernant les sous totaux considérer que je n'ai rien écrit,

Il fallait avant de faire les sous totaux, ordonner les données (A->Z).


:)

Encore merci tompols pour l'aide,


Bonne journée !
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
1 févr. 2010 à 16:25
De rien ;)
0