[VBA] Selectionner les lignes qui contiennent la valeur d'une input box

titibobo2 Messages postés 46 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 28 novembre 2007 - 26 janv. 2006 à 18:30
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 24 févr. 2006 à 20:21
Lu all,

je voudrais selectionner les lignes d'un fichier excel qui contiennent la valeur de la variable d'une inputbox puis les supprimer:

La valeur à chercher est dans la colonne 4


<OL>
<LI>

Dim datex As Long

<LI>

Dim l As Long

<LI>



<LI>



<LI>

datex = Application.InputBox(prompt:="Saisir la valeur", Title:="Saisie", Type:=1)

<LI>



<LI>

l = 2

<LI>

While Cells(l, 4) > datex

<LI>

Rows("l:l").Select

<LI>

Selection.Delete Shift:=xlUp

<LI>



<LI>

Wend
</LI></OL>
une idée ?
Merci

4 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
26 janv. 2006 à 18:48
Je dois avouer que je comprends pas bien ton code. datex, c'est ce que
tu veux supprimer non ? Alors pourquoi mettre while cells(I,4)>datex
? je vois pas vraiment le rapport...



Je fais pas de VBA mais approximativement tu ça devrait plutot ressembler à ceci :



dim ToDelete as long 'Pourquoi pas string en fait ? mais bon....



ToDelete = application.inputbox(...) 'ok



for i=RangéeMinimum to RangéeMaximum

if Cells(i,4) = ToDelete then 'Ici c'est sans doute faux pour la syntaxe de cellule mais tu




' sauras résoudre j'imagine...

rows(i).select

selection.delete

end if

next



Bon voila je sais pas pour la syntaxe, mais pour le code, ça devrait plutot ressembler à ceci...



Julien
0
titibobo2 Messages postés 46 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 28 novembre 2007
26 janv. 2006 à 18:59
car je veux des les valeur suppérieur à datex :

le bon code :

Sub SupprimerLignes()


'Déclaration des variables
Dim datex As String
Dim l As Long


'Boucle de test pour evité les plantage en cas de saisie de lettre
Do
datex = InputBox(prompt:="Saisir la valeur", Title:="Saisie")
Loop Until IsNumeric(datex)


'Boucle de suppression des lettres en partant du bas du tableau
'pour eviter les sauts si l'on part du début
'Ne nécessite pas un tableau trié
'et conversion de datex en long au lieu de string
For l = Cells(65536, 1).End(xlUp).Row To 2 Step -1
' Test de la valeur en colone 4 pour suppression
If Cells(l, 4).Value > CLng(datex) Then
Rows(l).Select
Selection.Delete (xlUp)
End If
Next l
End Sub
0
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
27 janv. 2006 à 10:27
salut,

Ta méthode de passage par le bas du tableau est super.

J'y avais jamais pensé et du coup je contournais toujours le problème de saut comme ça :

FirsSel = true
début boucle
Si ligne à supprimer
si firstcell
set selection = ligne ' on selection la ligne
firstcell = false
sinon
set selection = union (selection, ligne) ' on ajoute la ligne à la séléction
fin si
fin si
fin de boucle

supprimer la selection ' on supprime en bloc toutes les lignes

Je pense que ça doit être un peu plus rapide avec ma méthode car tu ne fais qu'une fois l'opération de suppresion. Il faudrait tester.

Voilà, si ça peut te donner des idées.

[mailto:K@lobit K@lobit]
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
24 févr. 2006 à 20:21
Salut Titi !

Je te file aussi une combine :

Dim Datex as Date, ValeurSaisieDansColonne as Date

PremLiVide = Columns(4).Find ("", [D1], , , xlByRows, xlNext).Row
'ca c'est pour chercher la premier ligne vide de la colonne D

Datex = InputBox(prompt:="Saisir la valeur", Title:="Saisie")

For i = PremLiVide To 1 Step -1
ColD = ("D" & i)
ValeurSaisieDansColonne = Range(ColD).Value

If Datex < ValeurSaisieDansColonne Then
Range(ColD).Select
Selection.Delete Shift:=xlUp
End If
Next i

A+

Mortalino
0