Option Explicit
Sub Actualisation()
Dim s, numcol1&, i&, x, A_wbook$, derligne%, MacroDebut As Date, T As Byte, T1 As Byte, DateDebutAnalyse As Date, DelaiMax As Byte
MacroDebut = Now
' indiquez l'ordre des colonnes par leur en-têtes
' ##### pour une colonne vide
Const OrdreTS = "Code cmde;Date cmde;Délai accepté;Réf. cde client;Nom client;Titre cmde;Avancement;Secteur d'activité"
Const OrdreTM = "Commande (code);Commande (titre);Client (nom);Commercial;Activité;CA devis;Mo devis;Tps devis;Achats devis;Dépenses devis;CA cde;Tps cde;Mo cde;Achats cde;Dépenses cde;Marge cde;CA réalisé;Tps réalisé;Mo réalisé;Achats réalisé;Engagé réalisé;Dépenses réalisé;Marge réalisé"
Application.ScreenUpdating = False
Worksheets("Liste des cmde client - export").Visible = True
Worksheets("Liste des cmde client").Visible = True
Worksheets("Resultat analyse - export").Visible = True
Worksheets("Resultat analyse").Visible = True
Worksheets("Cahier cmde client").Visible = True
Worksheets("Détails MO réel").Visible = True
'========================================================================================================
'======================== Liste des cmde client =======================================================
'========================================================================================================
Listecmdeclient:
MsgBox "Avant de cliquer sur OK, copier les données de :" & vbCrLf & "Carnet des commandes clients (après filtration)"
If IsClipboardEmpty = True Then
If MsgBox("Erreur : Pas de données copiées", vbRetryCancel) = vbCancel Then 'On vérifie que le presse papier soit remplis sinon on sort
Exit Sub
Else: GoTo Listecmdeclient
End If
End If
With Sheets("Liste des cmde client - export")
.Select
.Columns("A:H").ClearContents
.Range("A1").Select
.Paste 'on colle
End With
'============================== Supprimer collonnes ====================================
With Sheets("Liste des cmde client - export") ' on vérifie que les en-têtes existent bien avant de tout chambouler
s = Split(OrdreTS, ";")
For Each x In s
If x <> "#####" Then
numcol1 = Application.IfError(Application.Match(x, .Rows(1), 0), 0)
If numcol1 = 0 Then MsgBox "Erreur : Pas de colonne :" & x: Exit Sub
End If
Next x
For i = UBound(s) To 0 Step -1 ' tous les en-têtes sont présents, on modifie l'ordre des colonnes
.Columns(1).Insert xlShiftToRight
If s(i) <> "#####" Then
numcol1 = Application.IfError(Application.Match(s(i), .Rows(1), 0), 0)
.Columns(numcol1).Copy .Columns(1)
End If
Next i
.Range(Cells(1, UBound(s) + 2), Cells(1, .Columns.Count)).EntireColumn.Delete
End With
Sheets("Liste des cmde client - export").Cells.Copy Sheets("Liste des cmde client").Cells
Application.CutCopyMode = False
'======================================================================================================
'======================== Résultat analyse ===========================================================
'======================================================================================================
ResAnalyse:
MsgBox "Avant de cliquer sur OK, copier les données de :" & vbCrLf & "Carnet des commandes clients > Analyse > Liste des commandes"
If IsClipboardEmpty = True Then
If MsgBox("Erreur : Pas de données copiées", vbRetryCancel) = vbCancel Then 'On vérifie que le presse papier soit remplis sinon on sort
Exit Sub
Else: GoTo ResAnalyse
End If
End If
With Sheets("Resultat analyse - export")
.Select
.Columns("A:Z").ClearContents
.Range("A1").Select
.Paste 'on colle
End With
'============================== Supprimer collonnes ====================================
With Sheets("Resultat analyse - export") ' on vérifie que les en-têtes existent bien avant de tout chambouler
s = Split(OrdreTM, ";")
For Each x In s
If x <> "#####" Then
numcol1 = Application.IfError(Application.Match(x, .Rows(1), 0), 0)
If numcol1 = 0 Then MsgBox "Erreur : Pas de colonne :" & x: Exit Sub
End If
Next x
For i = UBound(s) To 0 Step -1 ' tous les en-têtes sont présents, on modifie l'ordre des colonnes
.Columns(1).Insert xlShiftToRight
If s(i) <> "#####" Then
numcol1 = Application.IfError(Application.Match(s(i), .Rows(1), 0), 0)
.Columns(numcol1).Copy .Columns(1)
End If
Next i
.Range(Cells(1, UBound(s) + 2), Cells(1, .Columns.Count)).EntireColumn.Delete
End With
Sheets("Resultat analyse - export").Cells.Copy Sheets("Resultat analyse").Cells
Application.CutCopyMode = False
'======================================================================================================
'======================== Cahier commande client===========================================================
'======================================================================================================
Cahiercmdeclient:
A_wbook = ActiveWorkbook.Name 'au cas où le nom du fichier change
Sheets("Cahier cmde client").Columns("A:Z").ClearContents
On Error GoTo OuvertureFichierErreur
Workbooks.Open "\\srv-dom\Commun\Commandes clients.xlsx", ReadOnly:=True
On Error GoTo 0
derligne = Range("C" & Rows.Count).End(xlUp).Row
Windows("Commandes clients.xlsx").Activate
On Error Resume Next ' au cas où il n'y ait pas de filtre a sortir
ActiveSheet.ShowAllData
On Error GoTo 0
Range("C2:Q" & derligne).Copy
Workbooks(A_wbook).Worksheets("Cahier cmde client").Activate
Range("A1").PasteSpecial Paste:=xlPasteValues 'on colle en valeur pour ne pas perdre les numéro de cmde
Application.CutCopyMode = False
Workbooks("Commandes clients.xlsx").Close SaveChanges:=False
'======================================================================================================
'======================== Détails MO Réel ===========================================================
'======================================================================================================
Moreel:
Application.CutCopyMode = False
DateDebutAnalyse = "22/12/2018"
DelaiMax = DateDiff("yyyy", DateDebutAnalyse, Now) * 15 'Le délai max est de 15s par année analysée
MsgBox "Avant de cliquer sur OK, copier les données de :" & vbCrLf & "Carnet des commandes clients > Analyse > Analyse globale (par cumul) > Double clique MO rélisée"
T1 = timer
If IsClipboardEmpty = True Then
If MsgBox("Erreur : Pas de données copiées", vbRetryCancel) = vbCancel Then 'On vérifie que le presse papier soit remplis sinon on sort
Exit Sub
Else: GoTo Moreel
End If
End If
Do While presse_papier = "non"
T = timer: Do While timer - T < 1: Loop
If timer - T1 > DelaiMax Then Exit Do 'delay max avant d'avorter ; a modifier selon la tolérence souhaitée
Loop
If presse_papier = "non" Then 'si quand ça quitte c'est toujours non, c'est que c'est à cause du timer
If MsgBox("Le delay d'attente a été dépassé, la copie a échoué", vbRetryCancel) = vbCancel Then
Exit Sub
Else: GoTo Moreel
End If
End If
With Sheets("Détails MO réel")
.Select
.Columns("A:O").ClearContents
.Range("A1").Select
.Paste 'on colle
End With
derligne = Range("T" & Rows.Count).End(xlUp).Row
Range("T3:V" & derligne).ClearContents
derligne = Range("A" & Rows.Count).End(xlUp).Row
Range("T2:V2").AutoFill Destination:=Range("T2:V" & derligne)
Sheets("TCD MO").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
Application.CutCopyMode = False
'======================================================================================================
'======================== Analyse globale ===========================================================
'======================================================================================================
Sheets("Analyse globale").Select
Defiltrer
derligne = Range("A" & Rows.Count).End(xlUp).Row
Range("A4:AK" & derligne).ClearContents
Sheets("Liste des cmde client").Select
derligne = Range("A" & Rows.Count).End(xlUp).Row
Sheets("Liste des cmde client").Range("A2:A" & derligne).Copy Sheets("Analyse globale").Range("A3") 'actualise la liste des cmdes
Sheets("Analyse globale").Select
derligne = Range("A" & Rows.Count).End(xlUp).Row
Range("B3:AK3").AutoFill Destination:=Range("B3:AK" & derligne)
With Columns("A:A").Font
.ColorIndex = xlAutomatic
.Bold = True
End With
Filtrer
'======================================================================================================
'======================== Fin ===========================================================
'======================================================================================================
Worksheets("Liste des cmde client - export").Visible = False
Worksheets("Liste des cmde client").Visible = False
Worksheets("Resultat analyse - export").Visible = False
Worksheets("Resultat analyse").Visible = False
Worksheets("Cahier cmde client").Visible = False
Worksheets("Détails MO réel").Visible = False
Sheets("TCD %").PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
Sheets("TCD BE atelier").PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
Sheets("TCD clients").PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
Sheets("Analyse globale").Range("A1").Select
Application.ScreenUpdating = True
MsgBox "Traitement terminé" & vbCrLf & "Durée d'exécution: " & Format(Now - MacroDebut, "hh:mm:ss")
Exit Sub
OuvertureFichierErreur:
If MsgBox("Erreur lors de l'ouverture de fichier...", vbRetryCancel) = vbCancel Then 'On vérifie que le presse papier soit remplis sinon on sort
Exit Sub
Else: GoTo Cahiercmdeclient
End If
End Sub