Pb avec row(i).select

  • Initiateur de la discussion Antoine
  • Date de début
A

Antoine

Guest
Bonjour xld


en général j'ai l'habitude de procéder comme ceci pour supprimer une ligne dans une feuille a partir d'une liste box qui affiche cette meme page
'######
Dim i As Integer
i = MajModif.ListMAJ.ListIndex ' on chope l'index
If i = 0 Then ' pour le premier a cause zero
i = 1
End If

i = i + 2 ' pour tenir compte du décalage entre l'index et les N°de ligne

Feuil3.Rows(i).Select
Selection.EntireRow.Delete

'### on recharge la liste, pour actualiser
chargeListRh
MajModif.ListMAJ.List = tableau
'#####

Mais là, exel ne veut rien savoir, une erreur sur range apparait au moment de séléctionner la ligne
je vois vraimment pas ou le problème dans ce code ( mais yen a surement un de problème, caché, à attendre ;- )
Et pire que ça, je vois pas non plus comment supprimer tout une ligne en fesant autrement. Bref, j'ai besoin d'un ch'tit coups de pouce pour me débloquer là.

Merci
Antoine
 
@

@+Thierry

Guest
Bonjour Antoine, le Forum

A prime abord, je ne vois pas l'utilité de :

If i = 0 Then ' pour le premier a cause zero
i = 1

Pire, je considère que celà engendre un décallage avec ceci :
i = i + 2 ' pour tenir compte du décalage entre l'index et les N°de ligne


En fait le i = i plus 2 est à priori normal en considérant que ta feuille à la première ligne contenant une entête...

Par contre si dans ta ListBox tu sélectionnes le Premier Item (donc Index Zéro) le "i" sera sera converti en 1, puis, ensuite tu ajouteras 2 à ce 1, ce qui fait que tu te retrouves en 3em ligne de ta feuille... au lieu de la seconde qui est selon toute vraissemblance la Première ligne du Tableau ....

Si ce n'est aps çà faudrait aussi voir le code de "chargeListRh" et comment le "Tableau" est construit...

Bon App
@+Thierry
 
A

Antoine

Guest
hum ... en effet j'ai oublier de joidre chargeListRh. le voici donc

dans un module

Public Chaine As String

Public Sub chargeListRh()
Dim l As Single
l = 2 ' la valeur 1 est attribué a l afin de partir de la ligne 2

Do While Feuil3.Cells(l, 1) <> "" ' compte les lignes
l = l + 1 ' la variable s'incrémente de un a chaque ligne
Loop

Dim i As Integer
fbase.ListeRh.ColumnCount = 4


ReDim Preserve tableau(1 To l - 2, 1 To 4) As String

For i = 1 To l - 2 ' i ira de 1 jusqu'au nombre de ligne total
tableau(i, 1) = Feuil3.Range("a1").Offset(i)
tableau(i, 2) = Feuil3.Range("b1").Offset(i)
tableau(i, 3) = Feuil3.Range("c1").Offset(i)
tableau(i, 4) = Feuil3.Range("d1").Offset(i)
Next i

fbase.ListeRh.List = tableau
End Sub


voila voila ..., ce que je comprend pas ( et qui m'agace un peu ... ;-) )c'est que j'utilise le meme code dans un autre prog et que ça marche bien !

enfin bref ... si vous voyez une erreur, n'hesiter pas.


antoine

P.S : Thierry, je prend note pour le if i = 0 ... en fait je sais pas pk j'ai fait ça ... surelent un instant d'égarement
 
@

@+Thierry

Guest
Re-Salut Antoine

Bon, je ne procède pas vraiment comme toi, mais je pense que tu te compliques terriblement la vie avec la boucle while pour compter les Lignes et ensuite ce Tableau Séquentiel (ce qui doit être long)

Voilà comment je procèderais :

Public Sub chargeListRh()
Dim L As Long
Dim Tableau

With Feuil3
Tableau = .Range("A2:D" & .Range("A65536").End(xlUp).Row)
End With
With fbase.ListeRh
.ColumnCount = 4
.List = Tableau
End With
End Sub


Et dans le UserForm en admettant un Double-Click pour supprimer la ligne :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
i = Me.ListBox1.ListIndex
i = i + 2
Feuil3.Rows(i).EntireRow.Delete
chargeListRh
End Sub

Là où tu te perds (à mon avis, mais sans test) c'est dans ce schmiblick du tableau séquentiel :

ReDim Preserve tableau(1 To l - 2, 1 To 4) As String

For i = 1 To l - 2

En plus choisir un l minuscule comme variable y a pas mieux pour se prendre la tête car on lit un 1... il faut le faire LOL !!!

Bon Courage et bon aprèm
@+Thierry
 
@

@+Thierry

Guest
Re-moi en me relisant

A adapter of course la Private Sub ListBox1 avec le nom de ta Listbox "ListeRh" au lieu ListBox1...

A supprimer un "résidu de test" dans la Sub chargeListRh : "Dim L As Long" (je l'avais mis en Majuscule quand même ce "L" !! lol)

@+Thierry
 
A

Antoine

Guest
Bon bon bon ... D'ACCORD ! je me complique la vie .. lol, ok, je m'incline totalement, ton code est carrément limpide comparé a mon "truc" pour charger mes listes. ( mais bon, j'ai une excuse, VBA j'ai jamais appris et .end(xlup) ça existe pas en VB )
et OUI le L minuscule c'est un peu illisible ... lol

merci bien, tu viens de soulager mes listebox ;-) .
Antoine

PS : je viens de tester ça marche, l'erreur etais n'etais pas dans feuil3.row(i).entirerow.delete mais bien dans le chargement moisi de la ListRh ... ( r'hem ;-))
 

Statistiques des forums

Discussions
314 190
Messages
2 106 987
Membres
109 733
dernier inscrit
chardou