Procedure trop large - Besoin de simplification
L
Bonjour. J'ai un module qui est trop gros. J'aurais besoin d'un coup de pouce pour le simplifier.
En gros j'ai un code qui va extraire de la données sur +- 150 fiches (donc une boucle dans un classeur), définie par la variable i
Dans chacune de ces fiches ll y a 3 sections ou je dois extraire de la données
- MAJ_strate arborescente ( x=85 à 96)
- MAJ régénération ( x = 104 à 117)
- MAJ herbacées ( x= 120 à 139)
Dans chacune des sections les lignes du début doivent se répéter (donc les lignes avant l'apparition de la variable x) qui me permettent ensuite de trier les données par station et strate.
Sub MAJ_for()
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
'**********************
'Début de la loop
'*******************************
For I = 1 To WS_Count
'*********************************
' MAj champs identification de la station & MAJ strate arborescente
'**********************************
Dim x As String
x = 85
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select
ActiveCell.Value = Worksheets(I).Range("d3").Value 'A:station
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("B83").Value 'B: type de strate
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("b" & x).Value 'c:essence_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("o" & x).Value 'd:essence_1latin_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("aa" & x).Value 'e :absolu
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ae" & x).Value 'f :relatif
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ai" & x).Value 'G :dominante
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select 'Retour à la colonne A
Copier/paste de la formule en changeant la valeur de X
Le X continu jusqu'à 96
'************************************************************
'MAJ strate Régénération
'****************************************
x = 104
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select
ActiveCell.Value = Worksheets(I).Range("d3").Value 'A:station
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("B103").Value 'B: type de strate
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("b" & x).Value 'c:essence_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("o" & x).Value 'd:essence_1latin_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("aa" & x).Value 'e :absolu
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ae" & x).Value 'f :relatif
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ai" & x).Value 'G :dominante
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select 'Retour à la colonne A
Copier/paste de la formule en changeant la valeur de X
x = de 105 à 117
'************************************************
'Strate non-ligneuse
'***********************
x = 120 à 139, donc copie/ paste de la formule en changeant le X de valeur
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select
ActiveCell.Value = Worksheets(I).Range("d3").Value 'A:station
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("B119").Value 'B: type de strate
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("b" & x).Value 'c:essence_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("o" & x).Value 'd:essence_1latin_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("aa" & x).Value 'e :absolu
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ae" & x).Value 'f :relatif
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ai" & x).Value 'G :dominante
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select 'Retour à la colonne A
x = 121
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select
ActiveCell.Value = Worksheets(I).Range("d3").Value 'A:station
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("B119").Value 'B: type de strate
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("b" & x).Value 'c:essence_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("o" & x).Value 'd:essence_1latin_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("aa" & x).Value 'e :absolu
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ae" & x).Value 'f :relatif
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ai" & x).Value 'G :dominante
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select 'Retour à la colonne A
Next I
End Sub
Merci de votre support.
bonjour,
ça devrait donner qu.qu. chose comme ça :
Sub MAJ_for()
Dim i%, x%, iR&, WsF As Worksheet
Set WsF = Worksheets("FOR")
iR = WsF.Cells(WsF.Rows.Count, 1).End(xlUp)(2).Row
'*******************************
For i = 1 To Worksheets.Count
With Worksheets(i)
'*********************************
' MAj champs identification de la station & MAJ strate arborescente
'**********************************
For x = 85 To 96
WsF.Cells(iR, 1) = .Range("D3") 'A:station
WsF.Cells(iR, 2) = .Range("B83") 'B: type de strate
WsF.Cells(iR, 3) = .Range("B" & x) 'c:essence_1
WsF.Cells(iR, 4) = .Range("O" & x) 'd:essence_1latin_1
WsF.Cells(iR, 5) = .Range("AA" & x) 'e :absolu
WsF.Cells(iR, 6) = .Range("AE" & x) 'f :relatif
WsF.Cells(iR, 7) = .Range("AI" & x) 'G :dominante
iR = iR + 1
Next
'************************************************************
'MAJ strate Régénération
'****************************************
For x = 105 To 117
WsF.Cells(iR, 1) = .Range("D3") 'A:station
WsF.Cells(iR, 2) = .Range("B103") 'B: type de strate
WsF.Cells(iR, 3) = .Range("B" & x) 'c:essence_1
WsF.Cells(iR, 4) = .Range("O" & x) 'd:essence_1latin_1
WsF.Cells(iR, 5) = .Range("AA" & x) 'e :absolu
WsF.Cells(iR, 6) = .Range("AE" & x) 'f :relatif
WsF.Cells(iR, 7) = .Range("AI" & x) 'G :dominante
iR = iR + 1
Next
'************************************************
'Strate non-ligneuse
'***********************
For x = 120 To 139
WsF.Cells(iR, 1) = .Range("D3") 'A:station
WsF.Cells(iR, 2) = .Range("B119") 'B: type de strate
WsF.Cells(iR, 3) = .Range("B" & x) 'c:essence_1
WsF.Cells(iR, 4) = .Range("O" & x) 'd:essence_1latin_1
WsF.Cells(iR, 5) = .Range("AA" & x) 'e :absolu
WsF.Cells(iR, 6) = .Range("AE" & x) 'f :relatif
WsF.Cells(iR, 7) = .Range("AI" & x) 'G :dominante
iR = iR + 1
Next
x = 121
WsF.Cells(iR, 1) = .Range("D3") 'A:station
WsF.Cells(iR, 2) = .Range("B119") 'B: type de strate
WsF.Cells(iR, 3) = .Range("B" & x) 'c:essence_1
WsF.Cells(iR, 4) = .Range("O" & x) 'd:essence_1latin_1
WsF.Cells(iR, 5) = .Range("AA" & x) 'e :absolu
WsF.Cells(iR, 6) = .Range("AE" & x) 'f :relatif
WsF.Cells(iR, 7) = .Range("AI" & x) 'G :dominante
iR = iR + 1
End With
Next i
End Sub
A+
L
Merci Galopin
Ca fonctionne bien.