rimbaut
Messages postés61Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention 1 juin 2014
-
12 août 2008 à 16:28
FaroukVazaha
Messages postés42Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention11 septembre 2010
-
18 août 2008 à 13:26
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
' 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
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 17 août 2008 à 23:27
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+
FaroukVazaha
Messages postés42Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention11 septembre 2010 18 août 2008 à 13:26
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