Extraction de données d'un tableau avec application.union

boom.hs

XLDnaute Nouveau
Bonjour,

Je cherche à récupérer seulement certaines lignes d'un tableau (toutes les lignes pour lesquelles une colonne donnée contient des données numériques) et à les insérer dans une autre feuille.

Pour cela, j'ai écrit la macro suivante :

Code:
Sub tri_taux_horaire()

Dim cellule, donnees As Range

Workbooks("test macro2.xls").Activate

Set donnees = Worksheets("Feuil3").Range("A2")

For Each cellule In Worksheets("Feuil3").Range("F:F")
    If IsNumeric(cellule) Then
        donnees = Application.Union(donnees, cellule.EntireRow)
    End If
Next

donnees.Copy
Worksheets("Tab_taux").Paste
        
End Sub


Mais le résultat n'est pas celui que j'espérai... A la fin de l'éxécution de la macro, la cellule Feuil3!A2 est vide, et je n'ai rien sur la feuille "Tab_taux", seule la couleur de fond de la cellule Tab_taux!A1 a changé (elle est devenu verte comme la cellule Feuil3.A2)

Il doit donc y avoir un problème au niveau de l'application.union ou de ma condition dans la boucle, mais j'ai beau chercher je ne comprend pas.

J'en profite pour poser une autre question qui pourrait me permettre d'améliorer mon code : est il possible d'initaliser un range (ici donnees) sur une valeur nulle ? (pour l'intersection du premier bouclage dans mon cas)

Merci de votre aide!
 

Pièces jointes

  • test macro2.xls
    72 KB · Affichages: 56
  • test macro2.xls
    72 KB · Affichages: 65
  • test macro2.xls
    72 KB · Affichages: 65

GIBI

XLDnaute Impliqué
Re : Extraction de données d'un tableau avec application.union

bonjour

La méthode union est a priori limité à 30 plages, d'autre part VBA ne doit pas apprécier le mélange de type de plage (une cellule et des lignes)

je te propose un copier/colle ligne par ligne : dans mon exemple j'ai limité la plage sur les 6 première colonnes et surtout sut la hauteur du tableau

Code:
Sub tri_taux_horaire()

Dim cellule, donnees As Range

Workbooks("test macro2.xls").Activate

Set donnees = Worksheets("Feuil3").Range("a2:F2")

For Each cellule In Worksheets("Feuil3").Range("F2:F" & Range("F65000").End(xlUp).Row)
    If IsNumeric(cellule) Then
       L = L + 1
       Range(Cells(cellule.Row, 1), Cells(cellule.Row, 6)).Copy
       ActiveSheet.Paste Destination:=Sheets("Tab_taux").Cells(L, 1)
    End If
Next
End Sub
 
Dernière édition:

boom.hs

XLDnaute Nouveau
Re : Extraction de données d'un tableau avec application.union

Merci GIBI,

J'ai testé ton code et ça marche mieux mais il ne me recopie que les 50 premières lignes. Serait-ce la limitation sur la hauteur du tableau dont tu parles ?

Et j'en profite pour te poser une petite question sur ton code, étant archi-débutant en VBA (c'est comme ça qu'on progresse!) : à quoi correspond le "Range("F65000".End(xlUp).row)" ?
 

GIBI

XLDnaute Impliqué
Re : Extraction de données d'un tableau avec application.union

Bonjour,

le Range("F65000".End(xlUp).row permet de trouver le numéro de ligne dont la cellule de la colonne F est renseigné : on part de la cellule F65000 et on remonte vers la cellule non vide.

pour trouver la dernière ligne du tableau il faut prendre une colonne qui est toujours présente

Dans ton exemple le dernier montant est en ligne 51 donc il y a 50 lignes.

Remplace la colonne F par la colonne A est cela devrait être OK
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 755
Messages
2 091 706
Membres
105 052
dernier inscrit
HAMOUD