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:

Jeannette

XLDnaute Junior
Bonsoir,
J'ai pris le fichier de @job75 pour essai
Tableau initial : 110 593 lignes
Tableau final : 86 017 (idem pour les 2 méthodes)
Enregistrer le fichier (sans données dans aucun onglet, sauf l'onglet initial), puis quitter excel
Ouverture du fichier
Avec le code VBA :
1er essai : 7,4 secondes
2ème essai : 3,2 secondes
Avec power query :
1er essai : 3,9 secondes
2ème essai : 0,7 seconde
le code M :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Lignes vides supprimées" = Table.SelectRows(Source, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))
in
    #"Lignes vides supprimées"
 

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

Discussions similaires

Réponses
9
Affichages
230

Membres actuellement en ligne

Statistiques des forums

Discussions
313 902
Messages
2 103 391
Membres
108 631
dernier inscrit
tarek.kanaan