recuperation de donnees dans une feuille

Delors

XLDnaute Nouveau
bonjour le forum, j'espère que vous vous portez a merveille car aujourd'hui je deborde d'imagination ce jour.

j'aimerais si possible dans une feuille d'environ 16000 lignes récupérer uniquement les lignes qui comportent des données, puisqu'en fait dans la feuille il ya des lignes qui n'ont aucune information, mais qui possedent des formules en arriere.

somebody can help me please ?

thanks :)
 

Delors

XLDnaute Nouveau
Re : recuperation de donnees dans une feuille

slt liloucmoi. j'esper que je reussirai a mieux t'expliquer ;)

voici ma fonction.
Code:
Private Sub Rechercher()
    
    ' Rechercher les données en fonction des critères
    Dim rCel As Range
    Dim lgLig As Long
    Dim lgLigDeb As Long


    Dim pp1 As String
    Dim pp2 As String
    Dim pp3 As String
    Dim pp4 As String
    
    pp1 = "*"
    pp2 = "*"
    pp3 = "*"
    pp4 = "*"
    
    If nom.Value <> "" Then pp1 = nom.Value
    
    If prenom.Value <> "" Then pp2 = prenom.Value
    
    If datenais.Value <> "" Then pp3 = datenais.Value
    
    If nom_mere.Value <> "" Then pp4 = nom_mere.Value
        
    Resultat.ListBoxLocataire.Clear

    ' Cas des personnes physiques uniquement
    
    'With Sheets("conso_pp")
    
    ' Boucle de la 6eme à la dernière ligne de la feuille

    For lgLigDeb = 6 To ThisWorkbook.Sheets("conso_pp").Range("A" & Cells.Rows.Count).End(xlUp).Row

            ' LCase permet de transformer une chaine de caracteres en minuscules
                If LCase(ThisWorkbook.Sheets("conso_pp").Range("C" & lgLigDeb).Value) Like LCase("*" & pp1 & "*") _
                    And LCase(ThisWorkbook.Sheets("conso_pp").Range("D" & lgLigDeb).Value) Like LCase("*" & pp2 & "*") _
                    And LCase(ThisWorkbook.Sheets("conso_pp").Range("E" & lgLigDeb).Value) Like LCase("*" & pp3 & "*") _
                    And LCase(ThisWorkbook.Sheets("conso_pp").Range("G" & lgLigDeb).Value) Like LCase("*" & pp4 & "*") _
                Then
                    With Resultat.ListBoxLocataire
                        .AddItem ThisWorkbook.Sheets("conso_pp").Range("A" & lgLigDeb).Value
                        .List(.ListCount - 1, 1) = ThisWorkbook.Sheets("conso_pp").Range("B" & lgLigDeb).Value
                        .List(.ListCount - 1, 2) = ThisWorkbook.Sheets("conso_pp").Range("C" & lgLigDeb).Value
                        .List(.ListCount - 1, 3) = ThisWorkbook.Sheets("conso_pp").Range("D" & lgLigDeb).Value
                        .List(.ListCount - 1, 4) = ThisWorkbook.Sheets("conso_pp").Range("E" & lgLigDeb).Value
                        .List(.ListCount - 1, 5) = ThisWorkbook.Sheets("conso_pp").Range("G" & lgLigDeb).Value
                        .List(.ListCount - 1, 6) = ThisWorkbook.Sheets("conso_pp").Range("H" & lgLigDeb).Value
                        .List(.ListCount - 1, 7) = ThisWorkbook.Sheets("conso_pp").Range("I" & lgLigDeb).Value
                        .List(.ListCount - 1, 8) = ThisWorkbook.Sheets("conso_pp").Range("M" & lgLigDeb).Value
                        .List(.ListCount - 1, 9) = ThisWorkbook.Sheets("conso_pp").Range("N" & lgLigDeb).Value
                        '.List(.ListCount - 1, 9) = Range("N" & lgLigDeb).Value
                        
                        lgLig = lgLig + 1
                     End With
                End If
    Next lgLigDeb    ' Fin de la boucle For
'End With
End Sub

lorsque je lance l'execution il m'affiche aussi dans ma listBox les lignes qui ont des valeurs nulles comme sur cette image, ce que je ne veux pas



ce que j'aimerais en fait c'est qu'il me selectionne d'abord uniquement les lignes qui ont des donnees et qu'ensuite ce soit sur celles la qu'il effectue la recherche, si bien sur c'est possible..

merci. :)
 

Pièces jointes

  • image.JPG
    image.JPG
    18 KB · Affichages: 34
  • image.JPG
    image.JPG
    18 KB · Affichages: 38
  • image.JPG
    image.JPG
    18 KB · Affichages: 40

liloucmoi

XLDnaute Occasionnel
Re : recuperation de donnees dans une feuille

A priori tu n'intercales pas de lignes vides entre tes lignes de données.
Si c'est le cas, tu peux changer l'indice de fin de boucle en :
Code:
=LIGNES(A:A)-NB.VIDE(A:A)
Bon c'est de la formule (le vba c'est pas ma spécialitée ^^ ), au pire, tu dois bien avoir une petite case ou mettre ca en police blanche pour la récupérée.

Sinon, vaut faire un test où tu ajoutes la ligne dans la listbox, genre :
Code:
With Resultat.ListBoxLocataire
                        If ThisWorkbook.Sheets("conso_pp").Range("B" & lgLigDeb).Value = 0 Then 
                        .AddItem ThisWorkbook.Sheets("conso_pp").Range("A" & lgLigDeb).Value
                        [...]
End if

En espérant aider ;)
 
Dernière édition:

Delors

XLDnaute Nouveau
Re : recuperation de donnees dans une feuille

thanks you very moich liloucmoi :D

j'ai essayé avec ceci et ca marche, enfin jusqu'a present
Code:
With Resultat.ListBoxLocataire
                    If ThisWorkbook.Sheets("conso_pp").Range("B" & lgLigDeb).Value = "" Then
                    lgLig = lgLig + 1
else
[...]
merci encore. mais saurais tu m'aider au cas ou je voudrais trier ma liste box par ordre croissant suivant la colonne C de ma feuille "conso_pp" ?

:)
 

liloucmoi

XLDnaute Occasionnel
Re : recuperation de donnees dans une feuille

Hum, désolé mes connaissances vba/excel vont s'arrêter ici...

tu dois pouvoir assez facilement trouver comment trier un tableau en fonction d'une colonne, c'est une fonctionnalité d'excel en dur. (je connais pas le vba associé ...)

Après, je pense que çca se corse si tu veux pas changer l'ordre des colonnes de la feuille.

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 611
Messages
2 090 219
Membres
104 452
dernier inscrit
hamzamounir