Otpimisation code VBA

Ci-joint une petite partie du code que je voudrais optimiser (en temps). Pourquoi parce que très souvent les lignes à supprimer sont toujours celles du bas (les dernières) et je commence à avoir de nombreuses lignes. Il n'y a que 2 colonnes : la 1ére les dates et la 2éme le cours de l'action.:

'Recherche de l'emplacement de l'Action à traiter. (se positionne sur la 1ére ligne) de la colonne recherchée

Call Recherche_Emplacement(Vnom)

'Chargement de la valeur à supprimer choisie dans la ListBox

vDate = LST_Valeur.Value

'Recherche de la Date sélectionnée dans Boucle jusqu'à valeur vide.

Do While Not IsEmpty(ActiveCell.Value)

If ActiveCell.Value = vDate Then

'On supprime ensuite les 2 valeurs dans la feuille.

ActiveCell.Delete

ActiveCell.Offset(0, 1).Delete

Else

ActiveCell.Offset(1, 0).Select

End If

Loop

bonsoir,

une proposition

'Recherche de l'emplacement de l'Action à traiter. (se positionne sur la 1ére ligne) de la colonne recherchée
Call Recherche_Emplacement(Vnom)

col = ActiveCell.Column
dl = Range(Cells(Rows.Count, col).Address).End(xlUp).Row

'Chargement de la valeur à supprimer choisie dans la ListBox
vdate = LST_Valeur.Value

For i = dl To 1 Step -1

If Cells(i, col) = vdate Then

'On supprime ensuite les 2 valeurs dans la feuille.
Range(Cells(i, col), Cells(i, col + 1)).Delete shift:=xlUp

' enlever l'apostrophe de la ligne suivante si il ne peut y avoir qu'une seule ligne par date

'Exit For

' enlever l'apostrophe des 2 lignes suivantes si les dates sont triées en ordre croissant
' ElseIf Cells(i, col) < vdate Then
' Exit For
End If

Next i

Encore une fois, gagné. Merci Essayé et déjà adopté.

2 petites questions :

Question générale : quand on met dl = ... est on obligé, conseillé !!!! de déclarer ses variables? en Dim dl as Long par ex

En terme de code puisque je suis sur que la ligne existe puisque je la sélectionne dans la listeBox et que je veux la supprimer par bouton. La présence de :

ElseIf Cells(i, col) < vdate Then

' Exit For

est elle utile?.

s'il n'y a qu'une ligne contenant la date

'Recherche de l'emplacement de l'Action à traiter. (se positionne sur la 1ére ligne) de la colonne recherchée
Call Recherche_Emplacement(Vnom)

col = ActiveCell.Column
dl = Range(Cells(Rows.Count, col).Address).End(xlUp).Row

'Chargement de la valeur à supprimer choisie dans la ListBox
vdate = LST_Valeur.Value

For i = dl To 1 Step -1

If Cells(i, col) = vdate Then

'On supprime ensuite les 2 valeurs dans la feuille.
Range(Cells(i, col), Cells(i, col + 1)).Delete shift:=xlUp
Exit For
End If

Next i

Ok, Merci encore H2SO4. Je solde la fiche.

bnsoir,

s'il n'y a qu'une ligne par date dans la colonne, le code ci-dessous devrait être encore plus efficace.

dl,col et re sont des variables. les bonnes pratiques veulent qu'on les definisse explicitement avec une instruction Dim.

dans ce cas

dim dl as long, col as integer, re as range

'Recherche de l'emplacement de l'Action à traiter. (se positionne sur la 1ére ligne) de la colonne recherchée
Call Recherche_Emplacement(Vnom)

col = ActiveCell.Column
dl = Range(Cells(Rows.Count, col).Address).End(xlUp).Row

'Chargement de la valeur à supprimer choisie dans la ListBox
vdate = LST_Valeur.Value
' rechercher la date dans la colonne sélectionnée
Set re = Range(Cells(1, col).Address & ":" & Cells(dl, col).Address).Find(vdate)
If Not re Is Nothing Then

Range(Cells(re.Row, col), Cells(re.Row, col + 1)).Delete shift:=xlUp

End If

Ah, oui, je crois bien effectivement que c'est une bonne méthode et en plus l'écriture est concise. J'ai d'autres endroits où je vais pouvoir utiliser ce principe .

Merci H2SO4.

bonjour,

tu peux utiliser le même principe pour ta procédure recherchenom.

Bon, j'ai usé et abusé du dernier programme plusieurs fois et tout se passe bien.

Mais j'ai un autre Sous Programme , je ne peux pas utiliser la dernière méthode. J'ouvre un nouveau fil pour le traiter et je m'explique.

Rechercher des sujets similaires à "otpimisation code vba"