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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
Sub ref_100000_Feuil2()
Dim lig As Integer
Dim ligliste As Integer
Dim col As Integer
Dim txt As Double
Dim NBref As Integer
Dim incr As Integer
Dim tablo As Variant
Application.ScreenUpdating = False
'MsgBox Oui + Non
Select Case MsgBox("effacer Feuil2 et les X ?", vbYesNo, "effacer Feuil2 ?")
Case vbYes
Sheets("liste").Range("D:D").ClearContents
Sheets("Feuil2").Range("A:ZZ").ClearContents
'bien que attention ici clearcontent supprime aussi la mise en forme
'************************************************************************************
'si il y a une mise en forme des cllule je suggere de faire plutot ceci:
Sheets("liste").Range("D:D") = ""
Sheets("Feuil2").Range("A:ZZ") = ""
'************************************************************************************
Case vbNo
End Select
incr = 0
For ligliste = 2 To 65
' plutot que travailler avec des select partout pour les sheets apprend a travailler avec des with /end with
With Sheets("liste") 'ici on ne select pas (perte de temps et utilisation inutile de memoire
'Range("A2").Select' je ne select pas on s'en fou en fait ca n'a aucunne utilité
If .Cells(ligliste, 1) = "" And liglist < 65 Then
.Range("D:D").ClearContents 'ici pareil si tu a une mise en forme prefere utiliser le ( ="" )
'ElseIf liglist = 62 Then
ElseIf .Cells(ligliste, 1) = "fin" Then
MsgBox "fin de colonne"
Exit Sub
End If
' 10000X
'attention ici que veux tu determiner 10000 & INCR VAUT 10000XXX
'10000+INCR VAUT EXEMPLE INCR=5 DONC 10005 CE QUI N'EST PAS LA MEME CHOSE MAIS CA JE NE PEUT PAS LE SAVOIR A TA PLACE
If .Cells(ligliste, 1).Text = "10000" & incr And .Cells(ligliste, 4) = "" Then
' "X" => "pour valider ce qui est fait"
.Cells(ligliste, 4) = "X"
txt = "10000" & incr
NBref = Application.WorksheetFunction.CountIf(.Range("A:A"), "=" & txt) 'cette ligne te sert a quoi???????
'MAUVAISE METHODE
'.Range(.Cells(ligliste, 1), .Cells(ligliste, 3)).Copy
' FEUIL2
' Sheets("Feuil2").Select 'mauvaise methode
' Range("A1").Select 'mauvaise methode
' ActiveSheet.Paste 'mauvaise methode
' Application.CutCopyMode = False 'mauvaise methode
'on va faire ceci: a la place
tablo = .Range(.Cells(ligliste, 1), .Cells(ligliste, 3))
End With
'*********************************************************************************************************
'meilleure METHODE
With Sheets("Feuil2") 'PUISQUE A PARTIR D'ici on travaille sur la feuil2 alors un with et non un select
.Range("A1").Resize(ligliste, 3) = tablo
'comme tu peut le constater en une ligne je fait la meme chose que toi en 5 ou 6 ligne et sans select
'****************************************************************************************************
'2 eme partie du code
For lig = 3 To 255
If .Cells(lig, 1) = "" Or .Cells(lig, 1) = .Range("A1") Then
.Cells(lig, 1) = .Range("A1")
For col = 2 To 255 Step 2
If .Cells(lig, col) = .Range("A1") Then
.Cells(lig, col + 1) = .Cells(lig, col + 1)
Exit For
ElseIf .Cells(lig, col) = "" Then
.Cells(lig, col) = Range("B1")
.Cells(lig, col + 1) = .Range("C1")
Exit For
Else
.Cells(lig, col + 2).Select ' pour quoi cela? a quoi te sert de selectionner une cell dans une boucle
End If
Next col
.Range("A1:C1").ClearContents ' ici pareil attention a la mise en forme des cellules
Exit For
Else
.Cells(lig + 1, col).Select ' pour quoi cela? a quoi te sert de selectionner une cell dans une boucle
End If
Next lig
.Cells(ligliste + 1, 1).Select ' pour quoi cela? a quoi te sert de selectionner une cell dans une boucle
End If
'incr = incr + 1
Next ligliste
End With
Application.ScreenUpdating = True
End Sub
' je nai pas optimiser la 2 eme partie du code je te laisse digerer tout ca bien que j'ai mis des commentaires |
Partager