En passant, j'ai pris la liberté de reformuler ton code pour qu'il soit:
1.- plus clair, en faisant une indentation plus systématique
2.- plus rapide, en évitant les résolutions d'appels de membres des objet par le stockage dans des variable comme wksAnalyse et wksResultat
3.- plus facile à déboguer, en déclarant toutes les variables en début de procédure et avec des types spécifiques
4.- plus facile à modifier, en créant des constantes qui permettent de remplacer des valeur en un seul endroit sans les rechercher partout dans le 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
| Sub affiche_result_Click()
Const COL As String = "A"
Dim wksAnalyse As Worksheet
Dim wksResultat As Worksheet
Dim c As Range
Dim cln As Long
Dim i As Long
Dim ligne As Long
Dim maligne As Long
Dim firstAddress As String
Set wksAnalyse = Worksheets("analyse")
Set wksResultat = Worksheets("résultats de la recherche")
'modifier le nom de la feuille qui reçoit. On admet que cellule de la colonne A est toujours remplie
ligne = wksResultat.Range(COL & ":" & COL).Cells( _
wksResultat.Range(COL & ":" & COL).Cells.Count _
).End(xlUp).Row
'modifier le nom de la feuille origine
With wksAnalyse.Range("E1:E5000")
Set c = .Find(ComboBox1.List(ComboBox1.ListIndex), LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
i = i + 1
maligne = c.Row
wksResultat.Range(COL & i + ligne & ":p" & i + ligne).Value = wksAnalyse.Range(COL & maligne & ":p" & maligne).Value 'modifier le nom des lfeuilles
Set c = .FindNext(c)
If c Is Nothing Then Exit Do ' Cette ligne est séparée du While suivant pour rapidité et
Loop While c.Address <> firstAddress ' éviter le plantage de l'appel c.Address quand c = Nothing
End If
End With
End Sub |
Ça devrait faire exactement ce que ça faisait auparavant, quoiqu'une ligne comme:
wksResultat.Range(COL & i + ligne & ":p" & i + ligne).Value = wksAnalyse.Range(COL & maligne & ":p" & maligne).Value 'modifier le nom des lfeuilles
n'assignera pas les valeurs de toutes les cellules comme tu semble le vouloir. Pour ça, il faudrait faire:
1 2
| wksAnalyse.Range(COL & maligne & ":p" & maligne).Copy
wksResultat.Range(COL & i + ligne).PasteSpecial |
Voilà!
Partager