Macro - Somme selon critères

Bonjour,

Je débute sur les macros et j'avoue que je galère un peu.

Ma macro ne fonctionne pas et je sais pourquoi, mais je ne sais pas comment faire pour obtenir ce que je veux. En formule excel j'aurais réussi en utilisant la formule SOMME.SI mais en macro ... aucune idée --'

bref en fait je dois faire des calculs, dans le cas présent il s'agit de faire le calcul de la variation de CA ente N et N-1.

je fais importer une balance générale de mon logiciel de compta sur le fichier excel, et j'aimerais que la macro additionne tous les montants de la colonne solde crédit (colonne 6) SI dans la première colonne les numéros de compte sont entre 7000000000 et 7079999999.

Et c'est ce critère qui me pose principalement problème car je ne peux pas renseigner le numéro de ligne puisque selon chaque dossier le compte 70xxx ne sera pas placé sur la même ligne.

Donc pour l'instant ma macro ressemble à ça:

Function VariationCA(numeroDossier As Variant) As Variant

'définition des variables

Dim WB as Workbook

Dim chemin as String

dim endline as Integer

Dim CAannéeN as double

Dim CAannéeN_1 as double

Dim VariationCAentreNetN_1 as variant

Dim numColonne as integer

'chemin de la balance à tester

chemin= "O:\EXPERTISE\CLIENTS\0-EXPORTS AGIRIS\B"&numeroDossier&".csv"

'ouverture du fichier de la balance client

Workbooks.OpenText Filename:=chemin, Origin:=xlWindows, Local:=True

'attribution de la référence du fichier ouvert à la variable WB

Set WB= ActiveWorkbook

'Calcul de la varation de CA à partir de la balance

If 7079999999#> cell(i,1) > 7000000000# Then

CAannéeN= Sum(Cells(i,6))

CAannéeN_1= Sum(Cells(i,12))

VariationCAentreNetN_1=(CAannéeN-CAannéeN_1)/CAannéeN_1 *100

else: Msgbox("Pas de vente?")

end if

end function

et lorsque je veux faire exécuter, le logiciel me fluote en jaune la partie "If 7079999..... Then"

donc je vois bien qu'il y a un souci à cet endroit mais je ne vois pas comment faire.

Voilà si vous avez une idée ce serait avec joie!

Merci d'avance et bonne journée

14vba.xlsm (20.57 Ko)

Bonjour,

En effet, cette syntaxe n'est pas autorisée par VBA

If 7079999999#> cell(i,1) > 7000000000# Then

il faudrait écrire

If cell(i,1).value < 7079999999 and cell(i,1).value > 7000000000 Then

mais il manque pas mal de chose à ta macro,

  • notamment la boucle i : de quelle ligne à quelle ligne
  • où sont ensuite mis les résultats ?

ahhh super merci! je vais essayer!

ah oui alors justement la boucle i

bah en fait je sais pas comment faire car selon les dossiers je peux avoir 10 comptes et pour un autre 500. je pensais que mettre juste i voulait dire "je ne borde pas"

et ensuite pour où sont mis les résultats je ne sais pas comment faire pour dire : je veux que la ligne où j'ai renseigné le numéro de dossier, le résultat s'affiche sur cette ligne et dans la colonne e (mais dans autre feuille que celle où y a ma balance) mais j'avoue que sur cette partie je n'ai pas encore cherché car je bloquais déjà sur le premier point ^^"

ceci "fonctionne", mais je ne pense pas que ce soit le résultat que tu attends

Sub Calculratioscomplémentaires()
'
' Calculratioscomplémentaires Macro
'Définition des variables
Dim numDossier As Variant

'à partir de la cellule sélectionnée:
'-détermination du numéro de dossier
numDossier = Cells(ActiveCell.Row, 2)

'test sur numéro dossier valide
If estValide(numDossier) Then

    VariationCA (numDossier)

Else: MsgBox ("Numéro de dossier non renseigné ou invalide!")

End If

'
End Sub

Function VariationCA(numeroDossier As Variant) As Variant
'définition des variables
Dim WB As Workbook
Dim chemin As String
Dim endline As Integer
Dim CAannéeN As Double
Dim CAannéeN_1 As Double
Dim VariationCAentreNetN_1 As Variant
Dim numColonne As Integer

'chemin de la balance à tester
'format O:\1EXPERTISE\CLIENTS\0-EXPORTS AGIRIS\Bxxxxxx.csv ou xxxxxx est le numéro de dossier, passé en variable
chemin = "O:\EXPERTISE\CLIENTS\0-EXPORTS AGIRIS\B" & numeroDossier & ".csv"

'raffraichissement écran désactivé
Application.ScreenUpdating = False

'ouverture du fichier de balance Client
'tes sur existence fichier1013000000
Workbooks.OpenText Filename:=chemin, Origin:=xlWindows, Local:=True

'attribution de la référence du fichier ouvert à la variable WB
Set WB = ActiveWorkbook

'Calcul de la varaition de CA à partir de la balance
'Sélection du critère de compte
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
    If Cells(i, 1).Value < "7079999999" And Cells(i, 1).Value > "7000000000" Then
        CAannéeN = (Cells(i, 6))
        CAannéeN_1 = (Cells(i, 12))
        VariationCAentreNetN_1 = (CAannéeN - CAannéeN_1) / CAannéeN_1 * 100
        MsgBox VariationCAentreNetN_1
    'Else: MsgBox ("Pas de vente?")
    End If
Next

End Function

Function estValide(numero As Variant) As Boolean
If numero <> " " Then
    If numero > 0 Then
    If IsNumeric(numero) Then
        estValide = True
        Else: estValide = False
        End If
    Else: estValide = False
    End If
Else: estValide = False
End If

End Function

Bien sûr, le fichier que tu as envoyé n'est pas 0-EXPORTS AGIRIS\B" & numeroDossier & ".csv mais balance excel export agiris.csv

Il ne faut pas programmer en VBA la fleur au fusil, mais approprie-toi d'abord les bases de la programmation VBA.

merci de ton retour, désolée mais je ne comprends pas cette ligne:

For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

et oui désolée le deuxième fichier qui intègre n'est pas sur le chemin que j'ai noté sur le code ni nommer comme indiqué, car je fais les exports de balance sur mon ordi pro, sauf que je la retravaille sur mon ordi perso (c'est tout un mic mac ^^")

Ceci

Range("A" & Rows.Count).End(xlUp).Row

va déterminer la dernière ligne renseignée.

On prend la ligne ultime du classeur avec Range("A" & Rows.Count), Rows.Count étant le nombre de ligne maxi d'un fichier, 65536 lignes jusqu'à Excel 2007, plus d'un million avec les nouvelles versions (1 048 576 lignes).

Ensuite on remonte par End(xlUp) jusqu'à la dernière ligne renseignée ... dont on prend le numéro de ligne par Row

Super merci beaucoup! je vais essayer tout ça et continuer car je dois faire d'autres calculs à partir de cette balance. mais je vais m'inspirer de tout ce que tu m'as dit!

Merci beaucoup pour ton aide en tout cas!

Rechercher des sujets similaires à "macro somme criteres"