Supprimer lignes vides dans Listbox? [Résolu]

sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 00:13 - Dernière réponse :  lefuineur
- 13 sept. 2011 à 18:59
Salut à tous....

J'ai un problème à résoudre.

J'ai une Listbox(List5) avec plein d'information et plusieurs lignes vides.

J'aimerais faire un code afin de supprimer l'ensemble des lignes vides et garder que les autres lignes contenants du texte.

Exemple.... List5 :

XXXXXXX
YYYYYYY


ZZZZZ

AAAAAA

Résultat après le traitement

XXXXXXX
YYYYYYY
ZZZZZ
AAAAAA

Avez-vous une idée ?



Merci par avance à tous
Afficher la suite 

27 réponses

Répondre au sujet
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 26 oct. 2009 à 14:23
+3
Utile
cela ne t'indique pas "rien du tout", comme tu le penses, mais tout !:!!
Si tu avais compris mon code, tu saurais pourquoi, pardi :
Tes cellules "vides", ami, ne le sont pas ! elles contiennent un ou plusieurs espoaces et rien d'autre et voilà donc ta solution (à ton problème de données bizarres) :

For.....

  toto = trim(classeur_excel.Columns.Range("X2").Cells(i, 1).value)

  if toto <> "" then list5.additem toto
Next


Quoi ?
On fait sauter tous ces espaces pollueurs avant et après !
Pollueurs ? Oui, pardi ! (à voir avec ceux qui les créent)...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 00:33
0
Utile
J'ai oublié de le dire.
j'ai essayé ce code mais il ne fonctionne pas.


--------------------------------

For x = 0 To List5.ListCount - 1
If List5.List(x) = "" Then
List5.RemoveItem (x)
End If
Next x

--------------------------------


Merci
Commenter la réponse de sancho12345
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 25 oct. 2009 à 11:20
0
Utile
Salut
Au lieu de supprimer les lignes vides il serait plus judicieux de faire en sorte de ne pas les ajouter

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 25 oct. 2009 à 11:54
0
Utile
Et tu ne précises pas non plus comment a été remplie ta listbox ! Par additem ou par un recordset (listbox "liée") ?
C'est tout de même important (surtout si liée !)
Si pas liée, tu peux supprimer, mais en remontant du bas vers le haut (step -1) sinon ===>>> croche-pieds, évidemment
Dans tous les cas de figure (liée ou non, additem ou non) la remarque faite par Galain est pleine de bon sens.
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 17:28
0
Utile
Bonjour à vous, désole pour le manque de précisions.

Le problème est que la listbox est remplie par un fichier excel qui lui est placé sur un réseau d'entreprise donc impossible de modifier le fichier source.

Voici comment est remplie le List5 :



Private Sub Command1_Click()
Dim classeur_excel As New Excel.Application
Dim h As Long



'DisplayAlerts=False sert à désactiver les messages d'erreur d'EXCEL
classeur_excel.DisplayAlerts = False
'C'est dans la propriété FileName que l'on indique le chemin du classeur auquel on se connecte
classeur_excel.Workbooks.Open FileName:=App.Path & "\import_export.xls", ReadOnly:=False, Editable:=True

num = 0
For i = 1 To 20 ' nombre de ligne
For j = 1 To 1

List5.List(num) = classeur_excel.Columns.Range("X2").Cells(i, j)

num = num + 1
Next
Next



' classeur_excel.Save
classeur_excel.Quit
classeur_excel.DisplayAlerts = True
Set classeur_excel = Nothing

End Sub


Mais dans le fichier excel il y a des cellules vides, voilà pourquoi je dois supprimer les lignes vide de mon list5.


Merci.
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 25 oct. 2009 à 17:35
0
Utile
Ce qui veux dire que tu remplis sans lier.
Dans ce cas :
1) utilise additem au lieu de jongler, comme tu le fais avec une variable num
2) n'ajoute (par additem, donc) que si pas vide
Où donc est ton problème ? C'est vraiment simple ....
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 17:56
0
Utile
J'ai essayé ce code mais il y a toujours les lignes vides


For i = 1 To 20 ' nombre de ligne
For j = 1 To 1
List5.AddItem classeur_excel.Columns.Range("X2").Cells(i,j)

Next
Next

Merci
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 25 oct. 2009 à 18:00
0
Utile
Je n'y vois absolument pas ta condition :
C'est tout de même facile d'écrire (je fais exprès de l'écrire en français et non en code, ... quand même !) :
Si classeur_excel.Columns.Range("X2").Cells(i,j) n'est pas vide alors
   List5.AddItem classeur_excel.Columns.Range("X2").Cells(i,j) 
Fin Si


Hé ?
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 18:22
0
Utile
Désolé mais cela fait peu de temps que j'ai commencé.

For i = 1 To 20 ' nombre de ligne
For j = 1 To 1
If classeur_excel.Columns.Range("x2").Cells(i, j) <> 0 Then

List5.AddItem classeur_excel.Columns.Range("X2").Cells(i, j)


End If
Next
Next



Encore merci pour ton aide.
Commenter la réponse de sancho12345
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 25 oct. 2009 à 18:56
0
Utile
Tu peux m?aider s'il te plaît car j'ai vraiment besoin de cette application.

Elle est important pour moi-même si pour toi cela te paraît évident mais pas pour moi.

J'espère bien évoluer dans l'avenir.


Merci encore.
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 25 oct. 2009 à 19:15
0
Utile
Ecoute,
1) pour moi et pour ce problème, c'est terminé (pas de lignes vides dans la listbox si on n'y ajoute pas des cellules ne contenant rien).
2) Lorsqu'une chaîne ne contient rien, ce n'est pas 0 qu'elle contient, mais rien (toto étant la chaîne, toto ne contient rien si toto = "")
3) ce sont là des choses qui font appel à des notions trop élémentaires (expressions conditionnelles, chaînes de caractères) pour que j'accepte d'aller plus loin tant que tu ne les as pas acquises (et elles répondent au même principe quel que soit le langage de développement).
Un conseil si tu veux continuer : ne tente jamais de mettre la charrue avant les boeufs
Bonne chance
Commenter la réponse de jmf0
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 26 oct. 2009 à 00:00
0
Utile
c'était pourtant simple : Jmf0 t'avait maché le travail

For i = 1 To 20 ' nombre de ligne
if List5.AddItem classeur_excel.Columns.Range("X2").Cells(i,1) <> "" then
List5.AddItem classeur_excel.Columns.Range("X2").Cells(i,1)
End if
Next

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 26 oct. 2009 à 10:57
0
Utile
Bonjour Alain,

Merci pour ton aide.

Je viens d'essayer ton code mais j'ai toujours des lignes vides dans mon list5.
-----------------------------------------
For i = 1 To 20 ' nombre de ligne


If classeur_excel.Columns.Range("X2").Cells(i, 1) <> "" Then
List5.AddItem classeur_excel.Columns.Range("X2").Cells(i, 1)
End If
Next

--------------------------------------------------------
As-tu une idée ?

Merci
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 26 oct. 2009 à 11:10
0
Utile
essaye en y allant par étape, genre :
dim toto as string '(important)

Et dans ta boucle Foir :

For.....

  toto = classeur_excel.Columns.Range("X2").Cells(i, 1).value

  if toto <> "" then list5.additem toto
Next


Tu remarqueras que je force à récupérer la propriété Value
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 26 oct. 2009 à 11:20
0
Utile
Bonjour Jmfo,

Merci pour ta réponse.

Je viens d'essayer ton code mais j'ai toujours des lignes vides dans mon list5.

----------------------------------
Dim classeur_excel As New Excel.Application
Dim h As Long
Dim toto As String

'DisplayAlerts=False sert à désactiver les messages d'erreur d'EXCEL
classeur_excel.DisplayAlerts = False
'C'est dans la propriété FileName que l'on indique le chemin du classeur auquel on se connecte
classeur_excel.Workbooks.Open FileName:=App.Path & "\import_export.xls", ReadOnly:=False, Editable:=True


For i = 1 To 20 ' nombre de ligne

toto = classeur_excel.Columns.Range("X2").Cells(i, 1).Value

If toto <> "" Then List5.AddItem toto

Next

End Sub
-----------------------------------------------------------------

Merci.
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 26 oct. 2009 à 11:32
0
Utile
Là, vois-tu, je commence à croire que tes réponses précédentes n'étaient pas exactes...

Petite vérification pour en avoir le coeur net

Ajoute un bouton de commande nommé command1 et mets-y ce code, une fois ta listbox remplie:

Private Sub Command1_Click()
  dim toto as string, toto1 as string
  toto = str(list1.listcount)
  list5.removeitem(0)
  doevents
  toto1 = str(list5.listcount)
  msgbox toto & vbcrlf & toto1
end sub


et dis nous ce qui apparaît dans ta msgbox !!
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 26 oct. 2009 à 11:41
0
Utile
Dans ma MSG box il y a d'inscrit ceci :

Projet 1
0
19



Merci
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 26 oct. 2009 à 11:53
0
Utile
Erreur dans ce que j'ai écrit plus haut (tu aurais pu rectifier toi-même !)
toto str(list 1 [size300]
/size.listcount)
ce n'est bien évidemment pas 1, mais 5 !
Commenter la réponse de jmf0
sancho12345 131 Messages postés jeudi 21 mai 2009Date d'inscription 18 mars 2012 Dernière intervention - 26 oct. 2009 à 11:57
0
Utile
Maintenant dans ma MSG box il y a d'inscrit ceci :

Projet 1
20
19



Merci
Commenter la réponse de sancho12345
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 26 oct. 2009 à 12:54
0
Utile
Bon.
On y voit maintenant plus clair.
Cela confirme que nous n'avons pas affaire à une listbox liée (c'était une crainte présente)
Maintenant que ce doute est levé, il ne reste qu'une seule explication :
certaines de tes cellules, qui pâraissent vides, ne le sont pas réellement (espaces, caractères invisibles ?) on va le savoir....

Code à mettre dans ton Command1, maintenant (après, bien évidemment, avoir rempli ta listbox, hein ...:

Private Sub Command1_Click()
 Dim nbvides As Integer
 For i = 0 To List5.ListCount - 1
    If List5.List(i) "" Then nbvides nbvides + 1
  Next
  MsgBox nbvides
End Sub

Et dis-nous ce qui s'affiche dans ta msgbox
Au passage : tu remarqueras que mes pas et essais, "à l'aveugle", relèvent plus du stratège que du développement .... Tu devrais avoir ces mêmes réflexes, sans l'accompagnement desquels il ne saurait y avoir de miracles en matière d'élaboration (c'est un peu comme lorsque l'on cherche des poux ===>> aucune connaissance nécessaire autre que l'élaboration d'une méthode de recherche... et cela n'est pas le résultat de connaissances, mais celui de la capacité à "sérier").
Commenter la réponse de jmf0

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Supprimer lignes vides dans Listbox? - page 2