|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Faire une somme d'une plage selon une condition [ Langages dérivés / VBA ] (rimbaut)
Informations & options pour cette discussion
|
mercredi 30 juillet 2008 à 18:57:56 |
Faire une somme d'une plage selon une condition

rimbaut
|
Bonsoir à tous, J'ai 2 feuilles dont l'une s'intitule "Balance" et retrace des n° de comptes en 1er colonne, en 2ième colonne des intitulés et en 3ième et 4 ième colonne des montants. Je voudrais que ma macro recherche dans la 1ère colonne s'il figure des comptes 707. Si vrai, je voudrais faire le total de ces 707 et copier ce total dans la feuille 2 en cellule C8. J'ai fait ce code qui ne fait rien :
Sub TransfertCalculMarge() Worksheets("B100").Activate Dim x As Integer ' declaration de variables Dim y As Integer ' ligne dans feuille 1 Dim y2 As Integer ' Ligne dans feuille 2 Dim total_annee_1 As Long Dim total_annee_2 As Long total_annee_1 = 0 ' Initialisation des variables total_annee_2 = 0 y2 = 8 y = 11 ' Boucle et condition afin de parcourir la colonne 1 de la balance et ' rechercher les n° cptes commencant par 707 Do While Sheets("Balance").Cells(y, 1).Value <> "" ' la boucle s'arrete quand la cellule ' est vide If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "707" Then ' test cherchant les cptes 707 Sheets("b100").Cells(y2, 4).Value = Sheets("balance").Sum(Range(y, 4)) y2 = y2 + 1 End If ' Fin de test y = y + 1 ' Compteur de la boucle, on incremente de 1 Loop ' fin de la boucle End Sub Quelqu'un peut il venir à mon aide
|
|
|
|
mercredi 30 juillet 2008 à 19:10:55 |
Re : Faire une somme d'une plage selon une condition

us_30
|
et pourquoi passer par une macro ? est-ce bien raisonnable... as-tu regardé du côté de SOMME.SI ?
Amicalement, Us.
|
|
|
|
mercredi 30 juillet 2008 à 19:33:03 |
Re : Faire une somme d'une plage selon une condition

rimbaut
|
Désolé mais je prefèrerai faire celà avec une macro.
J'ai tenté celà mais ça ne marche pas (quand je dis çà ne marche pas , c'est que rien ne se produit). Voici le fautif :
Sub TransfertCalculMarge() Worksheets("B100").Activate Dim x As Integer ' declaration de variables Dim y As Integer ' ligne dans feuille "Balance Dim y2 As Integer ' Ligne dans feuille "My B400" Dim Date_exercice1 As Date Dim Date_exercice2 As Date Dim Variat As String Dim En_pourcentage As String Dim total_annee_1 As Long Dim total_annee_2 As Long total_annee_1 = 0 ' Initialisation des variables total_annee_2 = 0 Date_exercice1 = Sheets("Accueil").Cells(32, 5).Value Date_exercice2 = Sheets("Accueil").Cells(36, 5).Value Variat = "" En_pourcentage = "" y2 = 8 y = 11 ' Boucle et condition afin de parcourir la colonne 1 de la balance et ' rechercher les n° cptes commencant par 707 Do While Sheets("Balance").Cells(y, 1).Value <> "" ' la boucle s'arrete quand la cellule ' est vide If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "707" Then ' test cherchant les comptes 707 total_annee_1 = total_annee_1 + Sheets("balance").Cells(y, 4).Value y2 = y2 + 1 End If ' Fin de test y = y + 1 ' Compteur de la boucle, on incremente de 1 Loop ' fin de la boucle Sheets("b100").Cells(y2, 3).Value = total_annee_1 '----------------------------------------- 'On fait de même pour les 706 y2 = y2 + 1 Do While Sheets("Balance").Cells(y, 1).Value <> "" ' la boucle s'arrete quand la cellule est vide If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "706" Then ' total_annee_1 = total_annee_1 + Sheets("balance").Cells(y, 4).Valu y2 = y2 + 1 End If ' Fin de test y = y + 1 ' Compteur de la boucle, on incremente de 1 Loop ' fin de la boucle Sheets("b100").Cells(y2, 3).Value = total_annee_1 End Sub
|
|
|
|
mercredi 30 juillet 2008 à 19:49:53 |
Re : Faire une somme d'une plage selon une condition

us_30
|
" je prefèrerai faire celà avec une macro. " ben, SOMME.SI avec une macro :
Sub Macro1() MsgBox WorksheetFunction.SumIf(Range("A1:A3"), "<>3", Range("B1:B3")) End Sub
Regarde déjà comment le faire avec SOMME.SI, puis adaptes le code ci-dessus... enfin, moi... ce que j'en pense des codes très long...
Que cela n'empêche personne te t'aider...
Amicalement, Us.
|
|
|
|
mercredi 30 juillet 2008 à 19:53:38 |
Re : Faire une somme d'une plage selon une condition

zen69
|
SUMIF deverait faire l'affaire... pas de macro rien de compliquer une simple commande...  zen69 aka Ortho Le Profett
|
|
|
|
mercredi 30 juillet 2008 à 20:17:24 |
Re : Faire une somme d'une plage selon une condition

bigfish_le vrai
|
salut, utilise des messsage box pour voir ce qui ce passe : Do While Sheets("Balance").Cells(y, 1).Value <> "" ' la boucle s'arrete quand la cellule ' est vide MsgBox "Sheets("Balance").Cells(y, 1).Value="& Sheets("Balance").Cells(y, 1).Value& vbCrLf & "Left(Sheets("Balance").Cells(y, 1).Value, 3)=" & Left(Sheets("Balance").Cells(y, 1).Value, 3) If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "707" Then ' test cherchant les comptes 707 total_annee_1 = total_annee_1 + Sheets("balance").Cells(y, 4).Value MsgBox "total_annee_1 =" & total_annee_1 & vbCrLf & "Sheets("balance").Cells(y, 4).Value=" & Sheets("balance").Cells(y, 4).Value y2 = y2 + 1 End If ' Fin de test y = y + 1 ' Compteur de la boucle, on incremente de 1 Loop ' fin de la boucle Sheets("b100").Cells(y2, 3).Value = total_annee_1 cela te permetra aussi de savoir si tu es entré dans la boucle while et si la condition if est vrai de temps en temps mais n'oublie pas de limiter la quantité de donnée sur la colonne 1 car sinon tu vas avoir a cliquer ok sur un grand nombre de message box A+ 
|
|
|
|
mercredi 30 juillet 2008 à 23:16:45 |
Re : Faire une somme d'une plage selon une condition

rimbaut
|
Re Bonsoir,
En ce qui concerne le somme.si celui ne fonctionne pas dans la mesure où je ne souhaite prendre que les 3 premiers chiffres du nombre.
Ex :
J'ai un compte 707100, 707200, 707300 etc... et je veux faire la somme des 707. Donc en l'état la fonction somme.si ne fonctionne pas.
J'ai essayé de mettre les Msgbox, mais il y une erreur de syntaxe dans le code que m'a transmis Bigfish.
Je ne comprends pas pourquoi mon code ne fonctionne pas !!
|
|
|
|
jeudi 31 juillet 2008 à 12:01:53 |
Re : Faire une somme d'une plage selon une condition

us_30
|
Bonjour,
A oui mais... Ce n'est pas ce que tu disais dans ton 1er Post... enfin, on ne pouvait le deviner.
=
Néanmoins, il reste encore la solution, sans VBA... Mais pour cela il faut dans une colonne libre (événtuellement la masquer), extraire les 3 premiers caractères des n° de compte, grâce à : = GAUCHE ( A1 ; 3 ) qui renvoi donc 707, puis de nouveau dans la feuille 2, mettre SOMME.SI ( plage ; "=707" ; plage )
=
Sinon, pour une macro, je vais te faire une petite proposition personnelle... car franchement tel que tu programme, je trouve ça bien trop lourd pour si peu...
Amicalement, Us.
|
|
|
|
jeudi 31 juillet 2008 à 12:34:53 |
Re : Faire une somme d'une plage selon une condition

us_30
|
Re,
Voici une proposition spécifique à ton pb... bien sur les références sont à adapter...
=
Sub MacroPourForumVBF()
' Récupération du dernier enregistrement de la colonne A (contenant les 707) Dim Dernier AsLong Dernier = Range("A65536").End(xlUp).Row
' Plage Dim A As Range Set A = Range("A1:A" & Dernier)
' Plage à cumuler Dim B As Range Set B = Range("B1:B" & Dernier)
' Boucle de recherche et de cumul Dim V As Range Dim S AsDouble ForEach V In A If Left(V, 3) = "707" Then S = S + Val(Replace(B.Cells(V.Row, 1), ",", ".")) Next
' Renvoi MsgBox S
EndSub
= Le Replace (bidule) n'est pas là pour faire beau, mais pour éviter la gestion d'erreur en cas de données non numérique.
Amicalement, Us.
|
|
|
Cette discussion est classé dans : colonne, annee, total, y2, balance
Répondre à ce message
Sujets en rapport avec ce message
Probleme avec boucle while [ par rimbaut ]
Bonsoir à tous,Je rencontre un probléme avec la boucle While. En effet, je voudrais parcourir une liste de compte d'une colonne sachant que je ne conn
Il ne s'affiche que les 2 dernieres lignes de la macro [ par rimbaut ]
Bonsoir à tous, Sur la macro ci dessous à l'éxécution il ne s'affiche que le dernier compte et le total. Je ne comprends pas pourquoi car j'ai initia
Compensation et optimisation de code [ par rimbaut ]
Bonjour, J'ai une balance qui se présente comme suit sur la feuille "Balance " Débit Crédit 6
Chercher mot colonne et copier toute la ligne asssociée [ par bimone78 ]
Bonjour,J'ai un petit soucis avec ma macro VB pour Excel. Je souhaite rechercher un gp de mots dans la colonne 1 par exemple "Total bonbons" et copier
Somme colonne MSFlexGrid [ par Sinsitrus ]
Salut !Je voudrais pouvoir depuis un Timer1, recupérer la somme de ma 4ème colonne (Total) de mon MSFlexGrid dans un TextBox (Total H.T)<img src="http
quel est le moyen le plus simple pour afficher le total d'une colonne de datagridview ? (vb2005express) [ par vercomax ]
bonsoir,(j'ai trouuvé des trucs mais pas en vb2005express)Je cherche le moyen le plus simple pour afficher le total d'une colonne de montants d'une da
Listview ou autre avec grille de couleur personnalisé [ par Robinwood01 ]
BonjourJe viens de passer a VB .Net et je cherche un controle comme le listview par exemple qui permet d'avoir une liste avec 4 colonne séparé par des
Sujet Combobox urgent [ par arch enemy123456 ]
bonjour tout le monde, beh j ai un souci là en VBA, j ai comparer deux colonnes à partir des deux classeures avec ce code la :Sub comparaison()Applica
Comment faire un tri par colonne lorsque le Flexgrid est en flexSelectionByRow ? [ par opala ]
Bonjour, J'ai un Flexgrid. J'ai le parametré avec SelectionMode = flexSelectionByRow Notamment parce que l'utilisateur pourra effacer une ligne compl
Trie d'une listview (en sélectionnant la colonne) sur vb2005 [ par lex1111 ]
Salut a tous, je cherche le moyen de trier ma listview connaissant le numero de la colonne a trier...'------------------------------------------------
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|