baal28
Nouveau membre
Arff je vais m'en remettre au judicieux conseil de zeb dans le domaine de l'optimisation de code.
Cette macro fonctionne en 3 partie:
1. Première partie vérifie si la facture est complète et inscrit quelques donne sur une page du classeur.
2. Deuxième partie crée un classeur dont la nomenclature est année-mois (09-05) et d'y copier le contenu de la facture sans formule, en respectant le format des cellule et le logo de cie
3. Troisième partie prise en charge de l'inventaire. Ajoute les produits désinstaller et défectueux en stock en indiquant leur état et leur provenance. Si la pièces est doa elle change le statut de cette pièces dans le listing de produits. Si la pièces est installer elle l'enlève de l'inventaire. Et finalement, incrémente de 1 le service utilisé dans l'optique de statistique future.
Bref partie 1 et 2 fonctionnent a merveille, quoique j'imagine y'a mieux. Mais c'est la meilleur optimisation que je puisse faire pour l'instant.
La partie 3 fonctionne, mais j'ai tellement l'impression que c'est plein d'erreur potentiel lors d'utilisation intensive. J'en ai baver toute la journée avec de multiple test. J'arrive pas faire mieux
Cette macro fonctionne en 3 partie:
1. Première partie vérifie si la facture est complète et inscrit quelques donne sur une page du classeur.
2. Deuxième partie crée un classeur dont la nomenclature est année-mois (09-05) et d'y copier le contenu de la facture sans formule, en respectant le format des cellule et le logo de cie
3. Troisième partie prise en charge de l'inventaire. Ajoute les produits désinstaller et défectueux en stock en indiquant leur état et leur provenance. Si la pièces est doa elle change le statut de cette pièces dans le listing de produits. Si la pièces est installer elle l'enlève de l'inventaire. Et finalement, incrémente de 1 le service utilisé dans l'optique de statistique future.
Bref partie 1 et 2 fonctionnent a merveille, quoique j'imagine y'a mieux. Mais c'est la meilleur optimisation que je puisse faire pour l'instant.
La partie 3 fonctionne, mais j'ai tellement l'impression que c'est plein d'erreur potentiel lors d'utilisation intensive. J'en ai baver toute la journée avec de multiple test. J'arrive pas faire mieux
Code:
Sub Enregistrer()
Dim numerofacture As String, cel As Range, fname As String
Dim Doa As Range
Dim doa2 As Range
Dim Bad As Range
Dim deinstall As Range
Dim qty As Range
Dim install As Range
Dim wb_f As Workbook
Dim ws_f As Worksheet, ws_fs As Worksheet, ws_p As Worksheet, ws_se As Worksheet
Set ws_se = Worksheets("services")
Set ws_p = Worksheets("produits")
Set wb_f = Workbooks("Facturation")
Set ws_f = Worksheets("facture")
Set ws_fs = Worksheets("factures")
numerofacture = ws_f.Range("B10")
abrege = Right(Left(numerofacture, 6), 5)
fname = "F:\ProActive\Factures\" & abrege
last_row = ws_p.Cells(2, 2).End(xlDown).Row
If ws_f.Range("I43") <> 0 And ws_f.Range("C49") <> "" And ws_f.Range("E13") <> "" And ws_f.Range("F13") <> "" And ws_f.Range("H8") <> "" And ws_f.Range("H9") <> "" And ws_f.Range("H10") <> "" Then
ws_fs.Range("A2").EntireRow.Insert
ws_fs.Range("A2") = ws_f.Range("B10")
ws_fs.Range("B2") = ws_f.Range("F1")
ws_fs.Range("C2") = ws_f.Range("I43")
ws_fs.Range("D2") = ws_f.Range("H10")
ws_fs.Range("E2") = ws_f.Range("H8")
ws_fs.Range("F2") = ws_f.Range("H9")
ws_fs.Range("G2") = (Now)
ws_fs.Range("H2") = ws_f.Range("C49")
ws_fs.Range("I2") = "NON"
Else
MsgBox ("Facture incomplète")
Exit Sub
End If
If Dir(fname & ".xls") = "" Then
Workbooks.Add.SaveAs Filename:=fname
Workbooks(abrege).Worksheets("Feuil1").Name = numerofacture
Application.DisplayAlerts = False
Workbooks(abrege).Worksheets("Feuil2").Delete
Workbooks(abrege).Worksheets("Feuil3").Delete
Application.DisplayAlerts = True
Else:
Workbooks.Open Filename:=fname & ".xls"
Workbooks(abrege).Worksheets.Add.Name = numerofacture
End If
wb_f.Activate
ws_f.Range("A1:I52").Copy
Workbooks(abrege).Worksheets(numerofacture).Activate
Range("a1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
wb_f.Activate
ws_f.Shapes("Image 40").Copy
Workbooks(abrege).Worksheets(numerofacture).Paste
wb_f.Activate
ws_f.Range("A1:I52").Copy
Workbooks(abrege).Worksheets(numerofacture).Activate
Range("a1").Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
With Workbooks(abrege).Worksheets(numerofacture).PageSetup
.PrintArea = Range("a1:i43")
.LeftMargin = Application.InchesToPoints(0.2)
.RightMargin = Application.InchesToPoints(0.2)
End With
Workbooks(abrege).Save
Workbooks(abrege).Close
With ws_f.Range("a35:a40")
Set doa2 = .Find(what:="doa", LookIn:=xlValues)
Set Bad = .Find(what:="bad", LookIn:=xlValues)
Set deinstall = .Find(what:="deinstall", LookIn:=xlValues)
If Not doa2 Is Nothing Then
With ws_p.Range("C2:c" & last_row)
Set Doa = .Find(doa2.Offset(0, 2).Value, LookIn:=xlValues)
If Not Doa Is Nothing Then Doa.Offset(0, -1) = "Doa"
End With
End If
If Not Bad Is Nothing Then
ws_p.Range("A2").EntireRow.Insert
ws_p.Range("A2") = "01SSIISEP03"
ws_p.Range("B2") = "Bad"
ws_p.Range("C2") = Bad.Offset(0, 2)
ws_p.Range("D2") = Bad.Offset(0, 1)
ws_p.Range("E2") = ws_f.Range("B10")
ws_p.Range("F2") = ws_f.Range("H10")
ws_p.Range("G2") = ws_f.Range("H8")
End If
If Not deinstall Is Nothing Then
ws_p.Range("A2").EntireRow.Insert
ws_p.Range("A2") = "01SSIISEP03"
ws_p.Range("B2") = "Deinstall"
ws_p.Range("C2") = Bad.Offset(0, 2)
ws_p.Range("D2") = Bad.Offset(0, 1)
ws_p.Range("E2") = ws_f.Range("B10")
ws_p.Range("F2") = ws_f.Range("H10")
ws_p.Range("G2") = ws_f.Range("H8")
End If
End With
For Each cel In ws_f.Range("h35:h40")
If cel <> "" Then
With ws_p.Range("C2:c" & last_row)
Set install = .Find(cel.Value, LookIn:=xlValues)
If Not install Is Nothing Then
install.EntireRow.Delete
End If
End With
End If
Next cel
For Each cel In ws_f.Range("E13:E28")
If cel <> "" Then
With ws_se.Range("A2:A65536")
Set qty = .Find(cel.Value, LookIn:=xlValues)
If Not qty Is Nothing Then
qty.Offset(0, 5) = qty.Offset(0, 5) + cel.Offset(0, 1)
End If
End With
End If
Next cel
End Sub