Fichier recapitulatif
Bonjour à tous,
j'ai quelques soucis avec la création d'une macro qui me faciliterai la tâche.
Le fichier représente de manière simplifié mon problème.
J'ai une base comportant la semaine, la date, le client et des quantités (en général 500 lignes environ).
A ce jour, j'ai pu créer (grâce notamment au forum) une macro qui me permet d'obtenir la feuille "traitement 1" à savoir insérer
une ligne entre chaque date et faire la somme des quantités.
Maintenant je souhaite réaliser la feuille "traitement 2" qui représente une synthèse de le feuille "traitement 1".
Je souhaiterai aussi que tous les jours ou les quantités sont nulles apparaissent.
Cordialement.
Bonjour patrick33,
Ça doit pouvoir se faire. Par contre une question avant de commencer : es-tu obligé de passer par 2 traitements ou bien un seul ferait l'affaire ?
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour à tous,
Tu aurais pu envoyer le fichier avec la macro du traitement 1,
on pourra alors modifier et compléter
Amicalement
Claude
Bonjour,
pour répondre à vba-new, tritement 1 est utilisée pour suivre un carnet de commande, j'ai donc besoin de savoir dans une journée
les commandes que j'ai à traiter. Je mets à jour au fur et à mesure des travaux réalisés.
Pour dubois, j'envoie la partie du code pour la réalisation de traitement 1.
Lors de mon premier envoi, j'a grandement simplifier mon dossier.
Je joint un fichier tel qu'il peut se présenter réellement la feuille traitement 1, jai juste modifier les données (confidentialité oblige).
Macro pour effectuer la partie traitement 1:
Dim Lgdep As Long
Lgdep = Range("A" & Rows.Count).End(xlUp).Row + 1 ' nbre de ligne à traiter'
For K = Lgdep - 1 To 2 Step -1
If Range("B" & K) <> Range("B" & K - 1) Then
With Range("H" & Lgdep)
.Formula = "=SUM(R" & K & "C:R" & Lgdep - 1 & "C)"
.Font.Bold = True ' mise en gras des caractères'
.Font.ColorIndex = 5 ' couleur des caractères:rouge'
.Font.Size = 12 'taille caractère'
End With
Range("A" & K & ":J" & K).Insert Shift:=xlShiftDown ' insertion ligne'
Lgdep = K
End If
Next K
If Lgdep > 2 Then
With Range("I" & Lgdep)
.Formula = "=SUM(R" & K & "C:R" & Lgdep - 1 & "C)"
.Font.Bold = True ' mise en gras des caractères'
.Font.ColorIndex = 5 ' couleur des caractères:bleu'
.Font.Size = 12 'taille caractère'
End With
End If
Cordialement
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir,
Ta macro légèrement modifiée
Sub Totaux()
Dim K As Long, Lgdep As Long
Application.ScreenUpdating = False
'--- supprime lignes totaux ---
On Error Resume Next 'si pas de vides
Range("a3:a" & [a65000].End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
'---
Lgdep = Range("A" & Rows.Count).End(xlUp).Row + 1 'nbre de ligne à traiter'
For K = Lgdep - 1 To 3 Step -1
If Range("B" & K) <> Range("B" & K - 1) Then
With Range("H" & Lgdep)
.Formula = "=SUM(R" & K & "C:R" & Lgdep - 1 & "C)"
.Font.Bold = True 'mise en gras des caractères'
.Font.ColorIndex = 5 'couleur des caractères:rouge'
.Font.Size = 12 'taille caractère'
End With
If K = 3 Then Exit For 'sort de la boucle à la ligne 3
Range("A" & K & ":J" & K).Insert Shift:=xlShiftDown 'insertion ligne
Lgdep = K
End If
Next K
End SubAmicalement
Claude
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
Pas de suite, c'est bon ?
Claude
Bonsoir,
merci pour la modification. Je l'ai testé, elle fonctionne.
Par rapport à ma demande, j'ai pu avancer.
Dans le fichier joint, j'ai extrait dans une feuille "traitement bis" les informations dont j'avais besoin.
Je dois encore avancer en:
- faisant apparaitre le jour avec les quantité à 0 (et si possible sans les samedi et les dimanche),
- en intégrant une ligne entre chaque semaine différente,
- faire une moyenne sur chaque semaine.
J'ai encore du boulot mais j'ai peut-être fait le plus facile, si vous avez des suggestions, je suis preneur.
Pour la macro que j'ai pu réaliser,je prends toute les améliorations possibles.
N'étant pas un expert en VBA, je n'ai peut-être pas écrit dans la simplicité.
Sub traitement_bis()
Dim Nbligne%, i%, lvide%, sem%
Application.ScreenUpdating = False
Nbligne = ActiveSheet.UsedRange.Rows.Count
Sheets.Add
ActiveSheet.Name = "Traitement bis" ' création d'une feuille traitement bis'
Sheets("Traitement 1").Select 'selection de la feuille à traiter'
For i = 2 To Nbligne
If Range("D" & i).Font.ColorIndex = 5 Then ' teste de la couleur de la cellule'
Sheets("Traitement bis").Range("B" & i).Value = Range("B" & i - 1).Value 'copie de la date de cellule Bi en Bi en Traitement bis'
Sheets("Traitement bis").Range("C" & i).Value = Range("D" & i).Value 'copie de la quantité de cellule Di en Fi en Traitement bis'
Sheets("Traitement bis").Range("A" & i).Value = Range("A" & i - 1).Value
End If
Next i
'suppression des lignes vides de la feuille Traitement bis'
Sheets("Traitement bis").Select 'selection de la feuille à traiter'
For lvide = Nbligne To 1 Step -1
If Application.CountA(Rows(lvide)) = Empty Then Rows(lvide).Delete
Next lvide
End Sub
Cordialement