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)

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

Membre Club
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

Membre Club
" 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...


  Google est ton ami, fait lui savoir!
  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

Membre Club
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

Membre Club
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

End
Sub

=
 
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...'------------------------------------------------


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.