XL 2016 Compiler les données de différente feuille

Bebzinda

XLDnaute Nouveau
bonsoir a tous! je veux récupérer uniquement les ligne avec des données d'une feuille contenant un tableau. mais lorsque j'exécute mon code, c'est toute les ligne qui sont récupéré. je précise également que plusieurs colonne du tableau contiennent des formule. alors je me demande si c'est la cause de mon problème? et comment le résoudre? j'ai vraiment besoin et hâte de franchir cette étape. Merci bien
 

Pièces jointes

  • Nouveau document texte.txt
    2.2 KB · Affichages: 8

Phil69970

XLDnaute Barbatruc
Bonjour @Bebzinda

Bis repetita

Une remarque tout d'abord :

1) Beaucoup de tes demandes s'appellent Vba ou Copy

Voir la charte :
2.3 – Le titre de la question doit être clair et comporter explicitement le sujet de la demande. Cela sous-entend qu’une nouvelle demande fait l’objet d’un nouveau fil.
2.4 – La question doit être posée le plus clairement possible en comprenant bien que le lecteur ne peut pas s’imaginer le problème.

Et ta réponse de l'époque que tu n'as pas su tenir compte !!!! 🤔

et comment le résoudre?
C'est bien la question que je me posais avec si peu d'élément

Pour info :
On essaye d'aider les demandeurs mais nous ne sommes ni Champollion ni Columbo

Bonne lecture
 

Bebzinda

XLDnaute Nouveau
Bonjour @Bebzinda

Bis repetita

Une remarque tout d'abord :

1) Beaucoup de tes demandes s'appellent Vba ou Copy

Voir la charte :
2.3 – Le titre de la question doit être clair et comporter explicitement le sujet de la demande. Cela sous-entend qu’une nouvelle demande fait l’objet d’un nouveau fil.
2.4 – La question doit être posée le plus clairement possible en comprenant bien que le lecteur ne peut pas s’imaginer le problème.

Et ta réponse de l'époque que tu n'as pas su tenir compte !!!! 🤔


C'est bien la question que je me posais avec si peu d'élément

Pour info :
On essaye d'aider les demandeurs mais nous ne sommes ni Champollion ni Columbo

Bonne lecture
slt suis vraiment desolé! excusez moi!
 

job75

XLDnaute Barbatruc
Bonjour Bebzinda, Phil69970,
je veux récupérer uniquement les ligne avec des données d'une feuille contenant un tableau.
Voyez le fichier joint et cette macro dans le code de la feuille "Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim cc%
Application.ScreenUpdating = False
Cells.Delete 'RAZ
[Tableau1].ListObject.Range.Copy [A1] 'copier-coller du tableau structuré
cc = UsedRange.Columns.Count + 1
UsedRange.Columns(cc) = "=1/SIGN(COUNTIF(RC1:RC[-1],""><""))" 'colonne auxiliaire
With ListObjects(1).Range
    .Columns(cc) = .Columns(cc).Value 'supprime les formules en colonne auxiliaire
    .Sort .Columns(cc), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(cc).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
    .Columns(cc).Delete xlToLeft 'supprime la colonne auxiliaire
End With
End Sub
Elle se déclenche quand on active la feuille.

Les lignes qui ne contiennent pas de données sont supprimées, grâce au tri l'exécution est très rapide même sur de grands tableaux.

Edit : j'avais oublié la fonction SIGN.

A+
 

Pièces jointes

  • Test.xlsm
    18.1 KB · Affichages: 2
Dernière édition:

job75

XLDnaute Barbatruc
Avec un tableau non structuré la macro est un peu différente mais c'est le même principe :
VB:
Private Sub Worksheet_Activate()
Dim cc%
Application.ScreenUpdating = False
Cells.Delete 'RAZ
Sheets("Feuil1").[A1].CurrentRegion.Copy [A1] 'copier-coller du tableau
cc = UsedRange.Columns.Count + 1
With UsedRange.Resize(, cc)
    .Columns(cc) = "=1/SIGN(COUNTIF(RC1:RC[-1],""><""))" 'colonne auxiliaire
    .Columns(cc) = .Columns(cc).Value 'supprime les formules en colonne auxiliaire
    .Sort .Columns(cc), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(cc).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
    .Columns(cc).Delete xlToLeft 'supprime la colonne auxiliaire
End With
With Usedrange: End With 'actualise les barres de défilement
Columns.AutoFit 'ajustement largeurs
End Sub
C'est plus rapide qu'avec le tableau structuré : 0,78 seconde sur 90 000 lignes.
 

Pièces jointes

  • Test(1).xlsm
    17.3 KB · Affichages: 1
Dernière édition:

Bebzinda

XLDnaute Nouveau
Bonjour Bebzinda, Phil69970,

Voyez le fichier joint et cette macro dans le code de la feuille "Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim cc%
Application.ScreenUpdating = False
Cells.Delete 'RAZ
[Tableau1].ListObject.Range.Copy [A1] 'copier-coller du tableau structuré
cc = UsedRange.Columns.Count + 1
UsedRange.Columns(cc) = "=1/SIGN(COUNTIF(RC1:RC[-1],""><""))" 'colonne auxiliaire
With ListObjects(1).Range
    .Columns(cc) = .Columns(cc).Value 'supprime les formules en colonne auxiliaire
    .Sort .Columns(cc), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(cc).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
    .Columns(cc).Delete xlToLeft 'supprime la colonne auxiliaire
End With
End Sub
Elle se déclenche quand on active la feuille.

Les lignes qui ne contiennent pas de données sont supprimées, grâce au tri l'exécution est très rapide même sur de grands tableaux.

Edit : j'avais oublié la fonction SIGN.

A+
 

Bebzinda

XLDnaute Nouveau
slt merci bien pour votre reaction j'ai texter le code mais cela n'a pas totalement résolu le problème. le fichier ci joint est muni de 2 feuil mais il faudra dupliquer la feuil "Feuil1" au moins deux foi afin de comprendre ma situation. le fichier d'origine est trop volumineux raison pour laquelle je l'ai synthétisé ainsi. maintenant avec les 4 feuils et avec la feuil"Compilation" en dernière , je veux récupérer les informations des trois première Feuil.
 

Pièces jointes

  • TEX.xlsm
    632.4 KB · Affichages: 8

job75

XLDnaute Barbatruc
Testez avec cette macro dans le code de la feuille "Compilation" :
VB:
Private Sub Worksheet_Activate()
Dim cc%, rc&
Application.ScreenUpdating = False
Rows("3:" & Rows.Count).Delete 'RAZ
With Sheets("Feuil1").ListObjects(1).Range
    cc = .Columns.Count + 1
    rc = .Rows.Count
    .Copy [A3] 'copier-coller du tableau structuré
End With
Cells(3, cc).Resize(rc) = "=1/SIGN(COUNTIF(RC1:RC[-1],""><""))" 'colonne auxiliaire
With ListObjects(1).Range
    .Columns(cc) = .Columns(cc).Value 'supprime les formules en colonne auxiliaire
    .Sort .Columns(cc), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(cc).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
    .Columns(cc).Delete xlToLeft 'supprime la colonne auxiliaire
End With
With UsedRange: End With 'actualise les barres de défilement
Columns.AutoFit 'ajustement largeurs
End Sub
Elle se déclenche quand on active la feuille.
 

Pièces jointes

  • TEX.xlsm
    303.2 KB · Affichages: 1

Discussions similaires

Réponses
10
Affichages
405
Réponses
9
Affichages
307

Statistiques des forums

Discussions
315 116
Messages
2 116 408
Membres
112 742
dernier inscrit
julien.sch