1 pièce(s) jointe(s)
Correction d’un apprenti en VBA
Bonjour à tous,
J’ai besoin que quelqu’un me corrige mon code, en effet je suis en apprentissage et j’aimerai progresser. De plus le temps de travail est de 500 s pour ce petit fichier, je pense que j’ai écris quelques maladresse qui ralentisse le travail.
Pour améliorer la procédure j’ai passé plusieurs heures sur les tutos de SilkyRoad et Didier Gonard concernant les variables tableaux, et j’avoue que si les exemples sont bien faits, par contre je n’arrive pas à l’appliquer sur ma procédure. Je pense qu’il me faudrait plus d’exemple avec des boucles pour comprendre le fonctionnement.
Merci par avance
Cordialement
Code:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| Sub TestABCDE()
Deb = Timer
Application.ScreenUpdating = False
'definition des variables
Dim shtFrom As Worksheet, shtTo As Worksheet
Dim A As Long, B As Long, X As Integer, Str_Val_1 As String, Str_Val_2 As String, Cel As Range
'initialisation du tableau
Sheets("A").Range("a20:c79").ClearContents
' I = NB DE COLONNES A RAPATRIER
For i = 1 To 150
decal = 1 * i
'copie successive des colonnes du tableau Z vers la colonne A20
Set shtTo = Worksheets("A")
Set shtFrom = Worksheets("A")
shtTo.Range("A20:A79").Value = shtFrom.Range("L20:L79").Offset(0, decal).Value
For X = 1 To 1
Select Case X
Case 1
Str_Val_1 = "=RC[-1]+sin(RC[-2]/R"
Set Cel = Range("F1")
End Select
' la formule est bouclée sur la totalité des valeurs de 20 à 59: A = Nb de N° a tester
For A = 20 To 360
Range("C20").FormulaR1C1 = Str_Val_1 & A & "C7)"
Range("C20").AutoFill Destination:=Range("C20:C79"), Type:=xlFillDefault
'le résultat du test est copié dans la cellule en face de la valeur A
Range("C12").Copy
Cel.Offset(A - 1, 0).PasteSpecial Paste:=xlPasteValues
' recalcul des données en fonction de la valeur max tableau
Str_Val_2 = "=RC[-1]+sin(RC[-2]/R"
Set Cel = Range("F1")
For B = 17 To 17
Range("C20").FormulaR1C1 = Str_Val_1 & B & "C6)"
Range("C20").AutoFill Destination:=Range("C20:C79"), Type:=xlFillDefault
Next B
Next A
Next X
'copie des résultats (en J pour controler l'augmentation des resultats, en I pour la valeur max)
shtTo.Range("I1").Offset(i - 1, 0).Value = shtFrom.Range("F17").Value
shtTo.Range("J1").Offset(i - 1, 0).Value = shtFrom.Range("F18").Value
shtTo.Range("b20:b79").Value = shtFrom.Range("c20:c79").Value
Next i
Application.ScreenUpdating = True
MsgBox "J'ai bossé " & Timer - Deb & " seconde"
End Sub |