programmation vba

alphonse16

XLDnaute Nouveau
Bonjour,

Je suis un nouveau membre débutant en vba. J'aurai besoin de votre aide pour pouvoir mener à bien une mission qui vient de m'être confiée.
En fait je dois récupérer en fonction d’un certain nombre de conditions les éléments du classeur créances et dettes fournisseurs pour les renseigner dans le classeur BFR 2010-2009.

Je voudrai dans un premier temps procéder à l’opération suivante :



1ère condition : prendre les comptes de la Colonne CPTC qui commencent par 401,404 ou 408

2ème condition : une fois ces comptes sélectionnés calculer la différence en fonction de la Colonne SENS (c'est-à-dire faire somme des débits (D)– somme des crédits(C) pour les dit comptes)



3ème condition : afficher dans le classeur BFR 2010-2009 au niveau de la cellule C8 la valeur de cette différence que pour des dates comptables (colonne DTCT) < ou =31/01/2010.
(C’est-à-dire qu’il faut récupérer les comptes qui commencent par 401, 404,408, que pour les dates inférieures ou égales (<ou=) au 31/01/2010 et ensuite calculer la somme des débits puis la somme des crédits et renseigner dans le classeur BFR à la ligne indiquée la différence entre débit et crédit).


Renseigner de même la ligne C18 mais pour des éléments dont la date comptable (Colonne DTCT) <= 29/02/2010.



Merci d’avance pour votre aide.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : programmation vba

Bonjour le Fil, Alphonse, bonjour le forum,

Les modifications sont en rouge... :
Code:
Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)
Dim cod As String 'déclare la variable cod (CODe CPTC)
[COLOR=red]Dim ong As Worksheet 'déclare la variable ong (ONGlet)[/COLOR]
 
'déclare les variables sc1 à sc12 (Somme Crédits)
Dim sc1 As Double, sc2 As Double, sc3 As Double, sc4 As Double, sc5 As Double, sc6 As Double
Dim sc7 As Double
', sc8 As Double, sc9 As Double, sc10 As Double, sc11 As Double, sc12 As Double
'déclare les variables sd1 à sd12 (Somme Débits)
Dim sd1 As Double, sd2 As Double, sd3 As Double, sd4 As Double, sd5 As Double, sd6 As Double
Dim sd7 As Double
', sd8 As Double, sd9 As Double, sd10 As Double, sd11 As Double, sd12 As Double
'déclare les variables dif1 et dif2 (DIFférences débits - crédits)
Dim dif1 As Double, dif2 As Double, dif3 As Double, dif4 As Double, dif5 As Double, dif6 As Double
Dim dif7 As Double
', dif8 As Double, dif9 As Double, dif10 As Double, dif11 As Double, dif12 As Double
 
[COLOR=red]For Each ong In Sheets 'boucle sur tous les onglets du classeur[/COLOR]
[COLOR=red]   If ong.Range("E2") <> "" Then 'condition1 : si la cellule E2 n'est pas vide[/COLOR]
        'boucle sur toutes les cellules éditées cel de la colonne E
        For Each cel In [COLOR=red]ong.[/COLOR]Range("E2:E" & [COLOR=red]ong.[/COLOR]Range("E65536").End(xlUp).Row)
            cod = CStr(Left(cel.Value, 3)) 'extrait les trois premiers caractères du compte CPTC
            Select Case cod 'agit en fonction du cod
                Case "401", "404", "408" 'cas "401", "404" et "408"
                    'condition : si la date est inférieure ou égale au 31 janvier 2010
                    If cel.Offset(0, 2).Value <= CDate("31/01/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc1 = sc1 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd1 = sd1 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
                    'condition : si la date est inférieure ou égale au 28/02/2010 février 2010
                    If cel.Offset(0, 2).Value <= CDate("28/02/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc2
                        If cel.Offset(0, -1).Value = "C" Then sc2 = sc2 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd2
                        If cel.Offset(0, -1).Value = "D" Then sd2 = sd2 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
 
                    'condition : si la date est inférieure ou égale au 31 mars 2010
                    If cel.Offset(0, 2).Value <= CDate("31/03/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc3 = sc3 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd3 = sd3 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
                    'condition : si la date est inférieure ou égale au 30 avril 2010
                    If cel.Offset(0, 2).Value <= CDate("30/04/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc4 = sc4 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd4 = sd4 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
                    'condition : si la date est inférieure ou égale au 31 mai 2010
                    If cel.Offset(0, 2).Value <= CDate("31/05/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc5 = sc5 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd5 = sd5 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
                    'condition : si la date est inférieure ou égale au 30 juin 2010
                    If cel.Offset(0, 2).Value <= CDate("30/06/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc6 = sc6 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd6 = sd6 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
                     'condition : si la date est inférieure ou égale au 31 juillet 2010
                    If cel.Offset(0, 2).Value <= CDate("31/07/2010") Then
                        'si la colonne "SENS" est un crédit, actualise la somme des crédits sc1
                        If cel.Offset(0, -1).Value = "C" Then sc7 = sc7 + CDbl(cel.Offset(0, 3).Value)
                        'si la colonne "SENS" est un débit, actualise la somme des débits sd1
                        If cel.Offset(0, -1).Value = "D" Then sd7 = sd7 + CDbl(cel.Offset(0, 3).Value)
                    End If 'fin de la condition
 
            End Select 'fin de l'action en fonction de...
        Next cel 'prochaine cellule de cel de la boucle
[COLOR=red]   End If 'fin de la condition1[/COLOR]
[COLOR=red]Next ong 'prochain onglet de la boucle[/COLOR]
 
'définit les variables dif1 à dif12
dif1 = sc1 - sd1
dif2 = sc2 - sd2
dif3 = sc3 - sd3
dif4 = sc4 - sd4
dif5 = sc5 - sd5
dif6 = sc6 - sd6
dif7 = sc7 - sd7
': dif8 = sc8 - sd8: dif9 = sc9 - sd9: dif10 = sc10 - sd10: dif11 = sc11 - sd11: dif12 = sc12 - sd12
'place les valeurs dans le classeur
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O8").Value = dif1
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O18").Value = dif2
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O28").Value = dif3
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O38").Value = dif4
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O48").Value = dif5
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O58").Value = dif6
Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O68").Value = dif7
'Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O78").Value = dif8
'Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O88").Value = dif9
'Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O98").Value = dif10
'Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O108").Value = dif11
'Workbooks("BFR 2010-2009.xls").Sheets("Feuil1").Range("O118").Value = dif12
End Sub
 

alphonse16

XLDnaute Nouveau
Re : programmation vba

Bonjour à tous,

Bonjour Robert. J'aurai une nouvelle fois besoin de tes lumières. Je suis toujours entrain de travailler sur les même fichiers. Alors ma difficulté réside au niveau de la redéfinition de la condition 1 ci-dessous:

Code:
[COLOR="Red"]For Each ong In Sheets 'boucle sur tous les onglets du classeur
   If ong.Range("E2") <> "" Then 'condition1 : si la cellule E2 n'est pas vide
        'boucle sur toutes les cellules éditées cel de la colonne E
        For Each cel In ong.Range("E2:E" & ong.Range("E65536").End(xlUp).Row)
            cod = CStr(Left(cel.Value, 3)) 'extrait les trois premiers caractères du compte CPTC
            Select Case cod 'agit en fonction du cod
                Case "401", "404", "408" 'cas "401", "404" et "408"[/COLOR]

Je m'explique:
je souhaiterai toujours récupérer les élements de chacun des onglets de ma feuille en fonction de la colonne E lorsque les 3 premières lettres sont 411 et 418 et qu'au niveau de la colonne C (une fois les éléments commençants par 411 et 418 sont sélectionnés) je récupère seulement les éléménts qui débutent par "E" ou "B". Le résultat ainsi obtenu sera ensuite stocké sur la feuille BFR.

Merci d'avance pour ton aide.
 

alphonse16

XLDnaute Nouveau
Re : programmation vba

Bonsoir Robert,Bonsoir le Fil,

Merci pour ton aide (encore une fois) J'ai été un peu pris donc j'ai pas pu venir sur le forum . J'ai lu ton dernier message et c'est vrai que ma demande n'était pas très explicite mais ta réponse m'a aidé à résoudre mon problème.
Actuellement je cherche à mettre en place des graphiques automatiques portant sur les différents postes de mon calcul. J'ai essayé au préalable avec l'enregistreur de macro mais le résultat obtenu n'est pas correct.
compte tenu de la mise en forme de mon fichier (la position des mois) j'éprouve des difficultés pour réaliser ces graphiques.
C'est pourquoi je suis une nouvelle fois à la recherche d'une aide qui me sera très précieuse.

Merci d'avance.
 

Pièces jointes

  • BFR 2xls.xls
    27.5 KB · Affichages: 53

Discussions similaires

Statistiques des forums

Discussions
312 765
Messages
2 091 883
Membres
105 084
dernier inscrit
lca.pertus