XL 2016 Bug sur courant alternatif pour récupérer cellules visibles

Nicocotte125

XLDnaute Nouveau
Bonjour

Après avoir filtré un tableau de données "BdD_ysorder_xls" sur la feuille éponyme (à savoir "BdD_ysorder_xls"), Je cherche à récupérer les données des lignes encore visible.
Cela fonctionne à merveille pour 3 de mes autres tables dans le classeur, mais une table fait de la résistance "BdD_ysorder_xls".

Parfois le résulat que me renvoi la commande :
VB:
Extrait_Carnet_Commandes = ThisWorkbook.Worksheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.SpecialCells(xlCellTypeVisible).Rows
    Nbr_Carnet_Commandes = ThisWorkbook.Worksheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Count

ou

VB:
Extrait_Nomenclature = ThisWorkbook.Worksheets("BdD_ysorder_xls").Range("A2:AA" & Derniere_Ligne_Commande).SpecialCells(xlCellTypeVisible).Rows
Nbr_Ligne_Nomenclature = ThisWorkbook.Worksheets("BdD_ysorder_xls").Range("A2:AA" & Derniere_Ligne_Commande).SpecialCells(xlCellTypeVisible).Rows.Count
me retourne un résultat correct, et parfois le résultat ne correspond pas au nombre de lignes visibles, et donc l'extrait du tableau est lui aussi erroné.

Je ne trouve pas de logique dans le processus d'erreur, et donc n'arrive pas à trouver de piste à creuser pour résoudre le problème.
J'ai joint à ce poste :
  • Un extrait épuré et banalisé (sans données sensibles), du fichier excel (macro+ table)
  • Une capture d'écran pour montrer un des cas qui provoque un "bug"
Bref si quelqu'un sait me mettre sur une piste, ca doit être vraiment tout bête mais je ne sais plus ou chercher !

Merci à vous
 

Pièces jointes

  • essai.xlsm
    78.8 KB · Affichages: 7
  • Capture.PNG
    Capture.PNG
    18.1 KB · Affichages: 7

Nicocotte125

XLDnaute Nouveau
Bonjour,
Merci, pour compter le nombre de lignes effectivement ca fonctionne 👍
Par contre pour récupérer le contenu des cellules visibles, la je suis coincé ! :oops: (ou alors il faudrait que je créer une boucle façon usine à gaz !)

J'ai l'impression que c'est la structure de la table en elle même qui pose problème, mais je n'arrive pas à savoir en quoi !

Peut-être que quelqu'un connait une autre syntaxe / fonction vba qui pourrait récupérer les résultat du filtre ?
 

job75

XLDnaute Barbatruc
Bonjour Nicocotte125, sousou,

Comptez les cellules visibles d'une colonne :
VB:
MsgBox ("Nbr ligne visible =" & ThisWorkbook.Sheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count)
affiche bien 4.

A+
 

Nicocotte125

XLDnaute Nouveau
Merci, mais en fait ce qui m'intéresse à terme, c'est surtout de récupérer certaines informations contenues dans chacune des lignes. Hors en ne pointant que sur une colonne, à moins d'écrire du code pas très élégant, je ne peux pas récupéré le contenu de la colonne "J-Article client Ref" et "K-Article Client Desig" par exemple, car il me faudra un équivalent du code ci-dessous :
VB:
Extrait_Nomenclature = ThisWorkbook.Worksheets("BdD_ysorder_xls").Range("A2:AA" & Derniere_Ligne_Commande).SpecialCells(xlCellTypeVisible).Rows

Après si personne ne trouve ce qui dans la table fait que les résultats avec
Code:
.row
sont parfois cohérents, parfois incohérents, je ferais autrement. J'ai juste l'impression que le problème est bête comme chou, mais je n'arrive pas à mettre le doigt sur la source !
 

job75

XLDnaute Barbatruc
Avec la méthode que j'ai indiquée c'est très simple :
VB:
Dim colJ As Range, colK As Range
Set colJ = [BdD_ysorder_xls].Columns(10).SpecialCells(xlCellTypeVisible)
Set colK = [BdD_ysorder_xls].Columns(11).SpecialCells(xlCellTypeVisible)
Vous pouvez ensuite copier-coller ces 2 plages où vous voulez ou les analyser par des boucles.
 

Nicocotte125

XLDnaute Nouveau
Merci...

Toutefois si j'arrive à percer le mystère du .
VB:
.row
facétieux, je mettrais à jour ce fil de discussion. Si dans le cadre de cet exemple, je me suis aperçu du problème parmi les quelques 16 500 lignes de la table, j'aurais préféré comprendre la génèse histoire pour repartir plus emprunt de plus de certitudes.

Si dans 2 à 3 semaines je n'ai pas trouver d'explication satisfaisante je clôturerai ce fil de discussion ;)...
 

sousou

XLDnaute Barbatruc
Bonjour à tous
un exemple pour récuperer tes données
Sub Macro1()
'
' Macro1 Macro
Set zone = ThisWorkbook.Sheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Rows

MsgBox ("Nbr ligne visible =" & ThisWorkbook.Sheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count)
'
'MsgBox zone.Address

For Each lg In zone
phrase = phrase & lg.Columns(8) & "/" & lg.Columns(9) & Chr(13)

Next
MsgBox phrase
End Sub
 

Nicocotte125

XLDnaute Nouveau
Bonjour à tous
un exemple pour récuperer tes données
Sub Macro1()
'
' Macro1 Macro
Set zone = ThisWorkbook.Sheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Rows

MsgBox ("Nbr ligne visible =" & ThisWorkbook.Sheets("BdD_ysorder_xls").ListObjects("BdD_ysorder_xls").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count)
'
'MsgBox zone.Address

For Each lg In zone
phrase = phrase & lg.Columns(8) & "/" & lg.Columns(9) & Chr(13)

Next
MsgBox phrase
End Sub
Merci...

c'est grosso-modo ce que je comptais faire en guise de plan B-
VB:
.cells
(en attendant de comprendre ou ça coince dans la plan A-
Code:
.rows
)... quand au Msgbox, c'était juste pour illustrer mes propos ;-)....