Compensation et optimisation de code

Signaler
Messages postés
61
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
1 juin 2014
-
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010
-
Bonjour,
J'ai une balance qui se présente comme suit sur la feuille "Balance "

Débit Crédit
60370000 Variat Stock V 42730,34
60370100 Variat Stock V.u. 29 859 0
60370400 Variat Stock V.o. 112448,89
60370500 Variat Stock Pr 34 040 0
60711200 Achats 150 000
60712000 Achats Transf 48 400
70450000 Vtes Travaux Ext 4234,93
70450002 Vtes Travaux Ext 35839,15
70610002 Ventes P. 1971,64
70620000 Vtes Main 23071,47
70620002 Vtes Main D'oeuvre 94842,74
70630002 Vtes M.o.ga 40658,43
70711100 Vtes V 73779,32

Ce que je voudrais faire est de faire le total des 607 (par exemple) et les recopier dans une cellule bien définie dans une autre feuille.
Pour ce faire, j'ai écrit ce code, mais je trouve qu'il fait usine à gaz et je me demande s'il n'est pas possible de l'optimiser d'autant plus qu'il ne fonctionne pas très bien.
En effet, parfois un montant d'un compte 6037 peur être débiteur mais le suivnat peut être créditeur. Or, je dois faire le total des 6037 et je ne sais comment faire.

Donc mes propos révèlent 2 questions :
- la 1er , peut on optimiser le code
- la 2ième, comment faire la compensation débit, crédit et affecter ce solde dans une cellule appropriée d'une autre feuille.

Voici mon code :

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_701 As Long
Dim total_annee_1_707 As Long
Dim total_annee_1_706 As Long
Dim total_annee_1_607 As Long
Dim total_annee_1_601 As Long
Dim total_annee_1_713 As Long
Dim total_annee_1_6037 As Long
Dim total_annee_1_6031 As Long

Dim total_annee_2_701 As Long
Dim total_annee_2_707 As Long
Dim total_annee_2_706 As Long
Dim total_annee_2_607 As Long
Dim total_annee_2_601 As Long
Dim total_annee_2_713 As Long
Dim total_annee_2_6037 As Long
Dim total_annee_2_6031 As Long

total_annee_1_707 = 0 ' Initialisation des variables
total_annee_1_706 = 0
total_annee_1_701 = 0
total_annee_1_607 = 0
total_annee_1_601 = 0
total_annee_1_713 = 0
total_annee_1_6037 = 0
total_annee_1_6031 = 0

total_annee_2_707 = 0 ' Initialisation des variables
total_annee_2_706 = 0
total_annee_2_701 = 0
total_annee_2_607 = 0
total_annee_2_601 = 0
total_annee_2_713 = 0
total_annee_2_6037 = 0
total_annee_2_6031 = 0

Date_exercice1 = Sheets("Accueil").Cells(32, 5).Value
Date_exercice2 = Sheets("Accueil").Cells(36, 5).Value

Variat = ""
En_pourcentage = ""


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) = "701" Then ' test cherchant
'les comptes 701
total_annee_1_701 = total_annee_1_701 + Sheets("balance").Cells(y, 4).Value

End If ' Fin de test


If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "707" Then ' test cherchant
'les comptes 707
total_annee_1_707 = total_annee_1_707 + Sheets("balance").Cells(y, 4).Value

End If ' Fin de test

If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "706" Then ' test cherchant
'les comptes 707
total_annee_1_706 = total_annee_1_706 + Sheets("balance").Cells(y, 4).Value

End If ' Fin de test

If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "607" Then ' test cherchant
'les comptes 707
total_annee_1_607 = total_annee_1_607 + Sheets("balance").Cells(y, 5).Value

End If ' Fin de test

If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "601" _
Or Left(Sheets("Balance").Cells(y, 1).Value, 3) = "602" Then ' test cherchant
'les comptes 707
total_annee_1_601 = total_annee_1_601 + Sheets("balance").Cells(y, 3).Value

End If ' Fin de test

If Left(Sheets("Balance").Cells(y, 1).Value, 3) = "713" Then ' test cherchant
'les comptes 707
total_annee_1_713 = total_annee_1_713 + Sheets("balance").Cells(y, 4).Value

End If ' Fin de test


If Left(Sheets("Balance").Cells(y, 1).Value, 1) = "6037" Then ' test cherchant
'les comptes 707
If total_annee_1_6037 > 0 Then
total_annee_1_6037 = total_annee_1_6037 + Sheets("balance").Cells(y, 3).Value
Else
total_annee_1_6037 = total_annee_1_6037 + Sheets("balance").Cells(y, 4).Value
End If
End If ' Fin de test


If Left(Sheets("Balance").Cells(y, 1).Value, 4) = "6031" _
Or Left(Sheets("Balance").Cells(y, 1).Value, 4) = "6032" Then ' test cherchant
'les comptes 707
total_annee_1_6031 = total_annee_1_6031 + Sheets("balance").Cells(y, 4).Value

End If ' Fin de test

y = y + 1 ' Compteur de la boucle, on incremente de 1

Loop ' fin de la boucle

Sheets("b100").Cells(8, 3).Value = total_annee_1_707
Sheets("b100").Cells(10, 3).Value = total_annee_1_706
Sheets("b100").Cells(9, 3).Value = total_annee_1_701
Sheets("b100").Cells(13, 3).Value = total_annee_1_607
Sheets("b100").Cells(14, 3).Value = total_annee_1_601
Sheets("b100").Cells(20, 3).Value = total_annee_1_713
Sheets("b100").Cells(26, 3).Value = total_annee_1_6037
Sheets("b100").Cells(34, 3).Value = total_annee_1_6031

End Sub

Merci pour votre aide

2 réponses

Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
Bonsoir Rimbaut ,

Est ce le code complet ?
Pour au moins essayer de t'aider , il faudrait envoyer le classeur xls sur le forum car un programme a besoin d'être testé dans son contexte.
A+
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2010

Bonjour,

Je te propose de créer 2 feuilles.
La première pour ton tableau de valeur : "Travail", et une deuxième pour les totaux de la balance : "Balance".
La feuille "Balance" contient en  "D2" la formule  suivante =C2-B2 jusqu'à la fin des numéro de compte (D9)
La feuille "Travail" a un bouton appellé "BALANCE" qui renvoi sur le code suivant :

Public NbLigMax, ListeARemplir, ListeALire As Integer
Public CompteAlire, CompteLu As String
Public LongALire, LongLue As Integer
Public ColALire As String

Sub BALANCE_Click()
    'Determiner le nombre de Lignes à parcourir sur la feuille "Travail"
    NbLigMax = Range("A2").End(xlDown).Row
    'La feuille "Balance" contient, de la ligne 2 à la ligne 9 dans la colonne "A", les numéros de comptes à totaliser
    For ListeARemplir = 2 To 9
        'Compte dont on veut les montants
        CompteAlire = Worksheets("Balance").Range("A" & ListeARemplir)
        'Récupération du nombre de caractères du compte
        LongALire = Len(CompteAlire)
        ' Boucle de lecture des valeurs à récuperer
        For ListeALire = 2 To NbLigMax
            'Mise en forme du compte lu pour faire correspondre sa longueur avec celle du compte à rechercher
            CompteLu = Worksheets("Balance").Range("A" & ListeALire)
            CompteLu = Mid(CompteLu, 1, LongALire)
            ' Est-ce que c'est le bon numéro
            If CompteLu = CompteAlire Then
            ' oui, alors il faut prendre les valeurs et les copier dans la feuille "Balance" en effectuant éventuellement l'addition avec une valeur existante.
            ' Ne pas chercher à savoir si la cellule contient 0 ou une valeur, il faut copier  car c'est plus rapide que d'effectuer un test.
                Worksheets("Balance").Range("B" & ListeARemplir) = Worksheets("Travail").Range("B" & ListeALire) + Worksheets("Balance").Range("B" & ListeARemplir)
                Worksheets("Balance").Range("C" & ListeARemplir) = Worksheets("Travail").Range("C" & ListeALire) + Worksheets("Balance").Range("C" & ListeARemplir)
            End If
             ' Après la copie inégalité avec le compte, on passe à la ligne suivante.
        Next
        ' Passage au compte suivant.
    Next
   
End Sub

Bon courage