Bonjour,
Nous travaillons a automatiser le traitement de nos donnes excel grace a une macro. Ne sachant pas rediger une macro, nous vous presentons ci dessous notre probleme, esperant votre assistance
RESULTAT SOUHAITE:
Mes data sont dans sheet1
Chacune de mes lignes contient:
dans la colonne B le nom du client
dans la colonne G la date darrivee
dans la colonne H la date de depart
dans la colonne J le prix de vente
dans la colonne K la quantite
Nous essayons de creer une macro permettant d'automatiser le calcul des donnees suivantes:
1. le total prix de vente (colonne J) par client et par semaine :
semaine 1 : du 1er au 7, le client "aaa" a un total vente : "x"
semaine 2 : du 8 au 15, le client "aaa" a un total vente : "y"
etc.
semaine 1 : du 1er au 7, le client "bbb" a un total vente : "z"
etc.
2. le total quantite (colonne K) par client et par semaine (meme schema que ci dessus)
Ces VALEURS (1.total prix et 2.total quantite) SERAIT REPORTEes vers une sheet nommee TOTAL.
Mon idee etait dutiliser une macro ayant la fonction decrite ci dessous, puis avoir une simple fonction total (SUM) dans chacune de ces sheet, reportant tout ces totaux vers une Sheet nomee TOTAL.
Description des fonctions de la macro:
Dans sheet1, Si la colonne B contient le mot "aaa" et la date dans la colonne J est comprise entre 01/01/13 et 01/07/2013 (premiere semaine) alors couper et deplacer la ligne correspondante vers sheet2.
Dans sheet1, Si la colonne B contient le mot "aaa" et la date dans la colonne J est comprise entre 01/08/13 et 01/15/2013 (seconde semaine) alors couper et deplacer la ligne correspondante vers sheet3.
Dans sheet1, Si la colonne B contient le mot "aaa" et la date dans la colonne J est comprise entre 01/16/13 et 01/23/2013 (troisieme semaine) alors couper et deplacer la ligne correspondante vers sheet2.
Dans sheet1, Si la colonne B contient le mot "aaa" et la date dans la colonne J est comprise entre 01/24/13 et 01/31/2013 (quatrieme semaine) alors couper et deplacer la ligne correspondante vers sheet5.
Dans sheet1, Si la colonne B contient le mot "bbb" et la date dans la colonne J est comprise entre 01/01/13 et 01/07/2013 (premiere semaine) alors couper et deplacer la ligne correspondante vers sheet6.
ainsi de suite pour chaque mot clef.
PUIS dans chaque sheet jai le total des deux donnes (1.prix de vente et 2.quantite) :
sheet2 sur ligne 1000 colonne J (prix de vente) jai :
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SUM(J1:J999)
De meme pour la colonne K (quantite)
PUIS dans sheet TOTAL jai un tableau avec les donnees cumulees:
Ligne client "aaa" -- Colonne Semaine 1Ligne client "aaa" -- Colonne Semaine 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part =Sheet2!J1000Ligne client "bbb"
Code : Sélectionner tout - Visualiser dans une fenêtre à part =Sheet2!K1000
Etc.
Repertoriant ainsi toute mes donnees par client et par semaine.
Jai une quinzaine de mots clefs, dont les informations contenues dans les lignes correspondantes sont a classer par semaine.
Je pensais donc faire un fichier excel par mois, mais quinze mots clefs multiplies par quatres semaines , representent 60 sheet.. est ce gerable? ou vaut il mieux classer les semaines dans une meme sheet:
mot clef aaa semaine 1 copier vers sheet2 ligne 2
mot clef aaa semaine 2 copier vers sheet2 ligne 1000
mot clef aaa semaine 3 copier vers sheet2 ligne 2000
mot clef aaa semaine 4 copier vers sheet2 ligne 4000
est ce mieux? cela limite le nombre de sheet a 15 au lieu de 60...
Lun des membres de votre Forum nous a genereusement assiste en creant la macro cidessous, permettant de classer nos donnees par client (macro que nous aurions ete incapable decrire, et qui marche parfaitement)
Nous essayons maintenant de rajouter a cette macro le classement des donnees par semaine:
Ah oui, les dates utilisent le systeme americain, MM/JJ/YYYY, je ne sais pas si ca fait une difference..!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Sub CutData() Dim MotCle Dim i As Byte Dim C As Range Dim F As String Dim Ligne As Long 'On définit les mots clés MotCle = Array("aaa", "bbb", "ccc") 'On effectue la recherche de chaque mot clé dans la colonne F de la sheet1 For i = 0 To UBound(MotCle) Do Set C = Worksheets("sheet1").Columns(2).Find(MotCle(i), LookIn:=xlValues, lookat:=xlPart) 'Si le mot clé est trouvé If Not C Is Nothing Then 'On définit le nom de la feuille où sera effectuée la copie F = "sheet" & (i + 2) With Worksheets(F) 'On définit la ligne où sera effectué le collage Ligne = .Range("B" & Rows.Count).End(xlUp).Row + 1 'On effectue le copier / coller C.EntireRow.Copy .Range("A" & Ligne) 'On supprime la ligne dans la sheet1 C.EntireRow.Delete End With End If Loop While Not C Is Nothing Next i End Sub
Merci davance pour votre agreable assistance!
Elie
Partager