OVH Cloud OVH Cloud

macro mensuelle

4 réponses
Avatar
Chris
Bonjour et bonne année à tous

j'ai une feuille excel qui sert de tampon pour des données provenant
d'access. nommée "TAMPON"
une autre feuille qui effectue des calculs sur ces données, nommée "compta
auto"
et une troisième feuille qui récapitule le tout mois par mois nommée "compta
annuelle"
cette dernière feuille est composée d'un tableau et dans la première colonne
le mois
et dans les lignes, les données
j'aimerais créer un bouton pour envoyer les données de la feuille "compta
auto" vers la feuille
"compta annuelle" sur la ligne du mois concerné (cette opération s'effectue
le 1er du mois suivant)
Pour résumer avec un exemple, j'aimerais que le 1er février, je clique sur
un bouton,
j'envoie les données du mois de janvier de la feuille "compta auto" dans la
ligne "janvier" de la feuille "compta annuelle"
et pareil pour tous les mois sans avoir à remplir le nom du mois

Merci de votre aide

4 réponses

Avatar
MichDenis
Sous ton bouton, tu pourrais avoir une macro ressemblant à ceci ...

Évidemment, tu auras à adapter le nom des feuilles et des adresses
des plages pour qu'elles correspondent à celles de ton projet :

'--------------------------------------
Sub test()

ThisWorkbook.Names.Add "LeMois", "=" & m, False

Dim Rg As Range
Dim Sh As Worksheet

'Afin de ne pas copier plus d'une fois les données
'de la plage, Création d'un Nom(insertion / nom)
'contenant le mois de la date où la macro a été exécuté.
ThisWorkbook.Names.Add "LeMois", "=" & Month(Date), False
'Ce nom est masqué - > non accessible à partir de la feuille
'de calcul

Select Case Month(Date) * 1
Case 1 To 12
'Si on est au mois de janvier,Copie le
'12 ième mois de l'année précédente
'si les données sont dans la base de données.
'M= Mois , Y = Année
m = Month(DateSerial(Year(Date), Month(Date) - 1, 1))
y = Year(DateSerial(Year(Date), Month(Date) - 1, 1))
End Select

'Test pour savoir si les données ont déjà été copiées
If m = [Lemois] Then
Set Sh = Worksheets("Feuil1")
With Sh
'Range("G1:G2") = zone de critère du filtre élaboré
.Range("G1") = ""
.Range("G2").Formula = "=AND(YEAR(A2=" & y & ")*(MONTH(A2)=" & m & "))"
'Plage du filtre élaboré pour des fins de l'exemple
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
With Rg
'Application du filtre élaboré
.AdvancedFilter xlFilterInPlace, Sh.Range("G1:G2")
'Copie de seulement les données vers la plage de destination
'sur une autre feuille "Feuil2" à partir de la cellule A1
.Offset(1).SpecialCells(xlCellTypeVisible).Copy Range("Feuil2!A1")
End With
'Efface la formule de la cellule.
.Range("g2") = ""
'Affiche à nouveau toutes les données.
.ShowAllData
End With
Else
MsgBox "Ce mois " & Format(DateSerial(y, Month(m), 1), "MMMM YYYY") & _
" a déjà été compilé."
End If

End Sub
'--------------------------------------




"Chris" a écrit dans le message de news:
%
Bonjour et bonne année à tous

j'ai une feuille excel qui sert de tampon pour des données provenant
d'access. nommée "TAMPON"
une autre feuille qui effectue des calculs sur ces données, nommée "compta
auto"
et une troisième feuille qui récapitule le tout mois par mois nommée "compta
annuelle"
cette dernière feuille est composée d'un tableau et dans la première colonne
le mois
et dans les lignes, les données
j'aimerais créer un bouton pour envoyer les données de la feuille "compta
auto" vers la feuille
"compta annuelle" sur la ligne du mois concerné (cette opération s'effectue
le 1er du mois suivant)
Pour résumer avec un exemple, j'aimerais que le 1er février, je clique sur
un bouton,
j'envoie les données du mois de janvier de la feuille "compta auto" dans la
ligne "janvier" de la feuille "compta annuelle"
et pareil pour tous les mois sans avoir à remplir le nom du mois

Merci de votre aide
Avatar
Chris
Salut
j'ai essayé, en remplaçant les plages de cellules et les noms des feuilles
par les miennes, mais il me dit systématiquement que "Ce mois Janvier 2006 a
déjà été compilé"
si je peux me permettre voici le classeur excel
http://cjoint.com/?bdqgOVYK7c
j'ai juste enlevé la feuille tampon, qui contient les données d'access, et
qui contient les formules me permettant de remplir les cases de la feuille
"compta auto"
ce qui m'intéresse c'est de "coller" les données de "compta auto" vers
"compta annuelle" dans la case du mois concerné
peut-être qu'avec le classeur, ce sera plus simple que mes explications
Merci d'avance




"MichDenis" a écrit dans le message de news:

Sous ton bouton, tu pourrais avoir une macro ressemblant à ceci ...

Évidemment, tu auras à adapter le nom des feuilles et des adresses
des plages pour qu'elles correspondent à celles de ton projet :

'--------------------------------------
Sub test()

ThisWorkbook.Names.Add "LeMois", "=" & m, False

Dim Rg As Range
Dim Sh As Worksheet

'Afin de ne pas copier plus d'une fois les données
'de la plage, Création d'un Nom(insertion / nom)
'contenant le mois de la date où la macro a été exécuté.
ThisWorkbook.Names.Add "LeMois", "=" & Month(Date), False
'Ce nom est masqué - > non accessible à partir de la feuille
'de calcul

Select Case Month(Date) * 1
Case 1 To 12
'Si on est au mois de janvier,Copie le
'12 ième mois de l'année précédente
'si les données sont dans la base de données.
'M= Mois , Y = Année
m = Month(DateSerial(Year(Date), Month(Date) - 1, 1))
y = Year(DateSerial(Year(Date), Month(Date) - 1, 1))
End Select

'Test pour savoir si les données ont déjà été copiées
If m = [Lemois] Then
Set Sh = Worksheets("Feuil1")
With Sh
'Range("G1:G2") = zone de critère du filtre élaboré
.Range("G1") = ""
.Range("G2").Formula = "=AND(YEAR(A2=" & y & ")*(MONTH(A2)=" & m &
"))"
'Plage du filtre élaboré pour des fins de l'exemple
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
With Rg
'Application du filtre élaboré
.AdvancedFilter xlFilterInPlace, Sh.Range("G1:G2")
'Copie de seulement les données vers la plage de destination
'sur une autre feuille "Feuil2" à partir de la cellule A1
.Offset(1).SpecialCells(xlCellTypeVisible).Copy
Range("Feuil2!A1")
End With
'Efface la formule de la cellule.
.Range("g2") = ""
'Affiche à nouveau toutes les données.
.ShowAllData
End With
Else
MsgBox "Ce mois " & Format(DateSerial(y, Month(m), 1), "MMMM YYYY") & _
" a déjà été compilé."
End If

End Sub
'--------------------------------------




"Chris" a écrit dans le message de news:
%
Bonjour et bonne année à tous

j'ai une feuille excel qui sert de tampon pour des données provenant
d'access. nommée "TAMPON"
une autre feuille qui effectue des calculs sur ces données, nommée "compta
auto"
et une troisième feuille qui récapitule le tout mois par mois nommée
"compta
annuelle"
cette dernière feuille est composée d'un tableau et dans la première
colonne
le mois
et dans les lignes, les données
j'aimerais créer un bouton pour envoyer les données de la feuille "compta
auto" vers la feuille
"compta annuelle" sur la ligne du mois concerné (cette opération
s'effectue
le 1er du mois suivant)
Pour résumer avec un exemple, j'aimerais que le 1er février, je clique sur
un bouton,
j'envoie les données du mois de janvier de la feuille "compta auto" dans
la
ligne "janvier" de la feuille "compta annuelle"
et pareil pour tous les mois sans avoir à remplir le nom du mois

Merci de votre aide





Avatar
MichDenis
La procédure soumise ne correspond absolument pas à
l'organisation des données de ta feuille de données.

Si j'ai du temps demain, je verrai !



"Chris" a écrit dans le message de news:

Salut
j'ai essayé, en remplaçant les plages de cellules et les noms des feuilles
par les miennes, mais il me dit systématiquement que "Ce mois Janvier 2006 a
déjà été compilé"
si je peux me permettre voici le classeur excel
http://cjoint.com/?bdqgOVYK7c
j'ai juste enlevé la feuille tampon, qui contient les données d'access, et
qui contient les formules me permettant de remplir les cases de la feuille
"compta auto"
ce qui m'intéresse c'est de "coller" les données de "compta auto" vers
"compta annuelle" dans la case du mois concerné
peut-être qu'avec le classeur, ce sera plus simple que mes explications
Merci d'avance




"MichDenis" a écrit dans le message de news:

Sous ton bouton, tu pourrais avoir une macro ressemblant à ceci ...

Évidemment, tu auras à adapter le nom des feuilles et des adresses
des plages pour qu'elles correspondent à celles de ton projet :

'--------------------------------------
Sub test()

ThisWorkbook.Names.Add "LeMois", "=" & m, False

Dim Rg As Range
Dim Sh As Worksheet

'Afin de ne pas copier plus d'une fois les données
'de la plage, Création d'un Nom(insertion / nom)
'contenant le mois de la date où la macro a été exécuté.
ThisWorkbook.Names.Add "LeMois", "=" & Month(Date), False
'Ce nom est masqué - > non accessible à partir de la feuille
'de calcul

Select Case Month(Date) * 1
Case 1 To 12
'Si on est au mois de janvier,Copie le
'12 ième mois de l'année précédente
'si les données sont dans la base de données.
'M= Mois , Y = Année
m = Month(DateSerial(Year(Date), Month(Date) - 1, 1))
y = Year(DateSerial(Year(Date), Month(Date) - 1, 1))
End Select

'Test pour savoir si les données ont déjà été copiées
If m = [Lemois] Then
Set Sh = Worksheets("Feuil1")
With Sh
'Range("G1:G2") = zone de critère du filtre élaboré
.Range("G1") = ""
.Range("G2").Formula = "=AND(YEAR(A2=" & y & ")*(MONTH(A2)=" & m &
"))"
'Plage du filtre élaboré pour des fins de l'exemple
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
With Rg
'Application du filtre élaboré
.AdvancedFilter xlFilterInPlace, Sh.Range("G1:G2")
'Copie de seulement les données vers la plage de destination
'sur une autre feuille "Feuil2" à partir de la cellule A1
.Offset(1).SpecialCells(xlCellTypeVisible).Copy
Range("Feuil2!A1")
End With
'Efface la formule de la cellule.
.Range("g2") = ""
'Affiche à nouveau toutes les données.
.ShowAllData
End With
Else
MsgBox "Ce mois " & Format(DateSerial(y, Month(m), 1), "MMMM YYYY") & _
" a déjà été compilé."
End If

End Sub
'--------------------------------------




"Chris" a écrit dans le message de news:
%
Bonjour et bonne année à tous

j'ai une feuille excel qui sert de tampon pour des données provenant
d'access. nommée "TAMPON"
une autre feuille qui effectue des calculs sur ces données, nommée "compta
auto"
et une troisième feuille qui récapitule le tout mois par mois nommée
"compta
annuelle"
cette dernière feuille est composée d'un tableau et dans la première
colonne
le mois
et dans les lignes, les données
j'aimerais créer un bouton pour envoyer les données de la feuille "compta
auto" vers la feuille
"compta annuelle" sur la ligne du mois concerné (cette opération
s'effectue
le 1er du mois suivant)
Pour résumer avec un exemple, j'aimerais que le 1er février, je clique sur
un bouton,
j'envoie les données du mois de janvier de la feuille "compta auto" dans
la
ligne "janvier" de la feuille "compta annuelle"
et pareil pour tous les mois sans avoir à remplir le nom du mois

Merci de votre aide





Avatar
Chris
merci beaucoup
"MichDenis" a écrit dans le message de news:
%
La procédure soumise ne correspond absolument pas à
l'organisation des données de ta feuille de données.

Si j'ai du temps demain, je verrai !



"Chris" a écrit dans le message de news:

Salut
j'ai essayé, en remplaçant les plages de cellules et les noms des feuilles
par les miennes, mais il me dit systématiquement que "Ce mois Janvier 2006
a
déjà été compilé"
si je peux me permettre voici le classeur excel
http://cjoint.com/?bdqgOVYK7c
j'ai juste enlevé la feuille tampon, qui contient les données d'access, et
qui contient les formules me permettant de remplir les cases de la feuille
"compta auto"
ce qui m'intéresse c'est de "coller" les données de "compta auto" vers
"compta annuelle" dans la case du mois concerné
peut-être qu'avec le classeur, ce sera plus simple que mes explications
Merci d'avance




"MichDenis" a écrit dans le message de news:

Sous ton bouton, tu pourrais avoir une macro ressemblant à ceci ...

Évidemment, tu auras à adapter le nom des feuilles et des adresses
des plages pour qu'elles correspondent à celles de ton projet :

'--------------------------------------
Sub test()

ThisWorkbook.Names.Add "LeMois", "=" & m, False

Dim Rg As Range
Dim Sh As Worksheet

'Afin de ne pas copier plus d'une fois les données
'de la plage, Création d'un Nom(insertion / nom)
'contenant le mois de la date où la macro a été exécuté.
ThisWorkbook.Names.Add "LeMois", "=" & Month(Date), False
'Ce nom est masqué - > non accessible à partir de la feuille
'de calcul

Select Case Month(Date) * 1
Case 1 To 12
'Si on est au mois de janvier,Copie le
'12 ième mois de l'année précédente
'si les données sont dans la base de données.
'M= Mois , Y = Année
m = Month(DateSerial(Year(Date), Month(Date) - 1, 1))
y = Year(DateSerial(Year(Date), Month(Date) - 1, 1))
End Select

'Test pour savoir si les données ont déjà été copiées
If m = [Lemois] Then
Set Sh = Worksheets("Feuil1")
With Sh
'Range("G1:G2") = zone de critère du filtre élaboré
.Range("G1") = ""
.Range("G2").Formula = "=AND(YEAR(A2=" & y & ")*(MONTH(A2)=" & m &
"))"
'Plage du filtre élaboré pour des fins de l'exemple
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
With Rg
'Application du filtre élaboré
.AdvancedFilter xlFilterInPlace, Sh.Range("G1:G2")
'Copie de seulement les données vers la plage de destination
'sur une autre feuille "Feuil2" à partir de la cellule A1
.Offset(1).SpecialCells(xlCellTypeVisible).Copy
Range("Feuil2!A1")
End With
'Efface la formule de la cellule.
.Range("g2") = ""
'Affiche à nouveau toutes les données.
.ShowAllData
End With
Else
MsgBox "Ce mois " & Format(DateSerial(y, Month(m), 1), "MMMM YYYY") &
_
" a déjà été compilé."
End If

End Sub
'--------------------------------------




"Chris" a écrit dans le message de news:
%
Bonjour et bonne année à tous

j'ai une feuille excel qui sert de tampon pour des données provenant
d'access. nommée "TAMPON"
une autre feuille qui effectue des calculs sur ces données, nommée
"compta
auto"
et une troisième feuille qui récapitule le tout mois par mois nommée
"compta
annuelle"
cette dernière feuille est composée d'un tableau et dans la première
colonne
le mois
et dans les lignes, les données
j'aimerais créer un bouton pour envoyer les données de la feuille "compta
auto" vers la feuille
"compta annuelle" sur la ligne du mois concerné (cette opération
s'effectue
le 1er du mois suivant)
Pour résumer avec un exemple, j'aimerais que le 1er février, je clique
sur
un bouton,
j'envoie les données du mois de janvier de la feuille "compta auto" dans
la
ligne "janvier" de la feuille "compta annuelle"
et pareil pour tous les mois sans avoir à remplir le nom du mois

Merci de votre aide