Selection lignes dans un tableau

Bonsoir à tous

J'ai un tableau par année depuis 2002 où sont stockées des informations concernant des individus. Ces individus ont deux identifiants et sont donc uniques Mon but est de faire un tableau réunissant les informations d'un même individu issues des tableaux de toutes les années de 2002 à 2012.

Je précise que je suis débutant en programmation VBA excel. Depuis peu je bute sur un problème dont la réponse doit être relativement simple mais qui m’échappe.

Voici l'objet de la demande d'aide:

Je veux sélectionner des lignes dont la valeur est 1 dans la colonne Y. Simple non ? J'ai fait un tri pour les regrouper. Voici deux "bouts" de macros différentes pour sélectionner les lignes dans le tableau source pour les copier dans le tableau destination

Sub tst()

Dim i As Long

i = 1

While Not IsEmpty(Cells(i, 3))

If Cells(i, 25).Value = 1 Then

Rows(i).Select

Selection.Copy

End If

i = i + 1

Wend

End Sub

Sub test_2()

Dim i As Long

i = 1

For i = Range("Y" & Rows.Count).End(xlUp).Row To 2 Step -1

If Cells(i, 25).Value = 1 Then

Rows(i).Copy

End If

Next i

End Sub

LA 1re ne me sélectionne que la dernière ligne et la seconde que la première de la série de lignes contenant 1 en Y malgré l'utilisation de boucles.

Autre impératif, je dois travailler sur plusieurs gros fichiers, environ 1 000 000 de lignes voire plus. Prière de ne pas rire, je me débrouille avec les moyens du bord. Cela pour dire que la solution doit en plus de fonctionner ,doit être rapide.

Merci pour votre aide

Amicalement

Jean-François

Bonjour,

si tu veux optimiser il faut donner tous les détails de ce que tu veux faire.

Et mettre un fichier exemple avec tous les cas de figure et le résultat à obtenir.

eric

Bonjour,

Tes 2 boucles fonctionnent correctement.

Elles te permettent bien de copier les lignes dont la colonne Y contient un 1.

Le problème, c’est que la copie se fait dans le presse papier et que chaque copie écrase la précédente.

As-tu envisagé d’utiliser un filtre ?

A+

Bonjour Eric

Merci pour ta réponse rapide

J'ai par année un tableau de 24 colonnes avec pour chacun un nombre de lignes variable. Chaque ligne contient des informations sur des individus. Chaque individu possède deux identifiants propres qui le rendent unique. (ah si j'avais access au boulot). Il y a plusieurs lignes par individus, par exemple plusieurs achats...

Je sélectionne avec ces 2 identifiants que j'ai appelé pour l'exemple X et Y les lignes d'un individu pour chaque année de façon à les copier dans un tableau unique dans le but d'obtenir tous ses achats sur toutes les années.

Voici le principe de ma macro : j'ouvre une année, je sélectionne (les bouts de codes fournis dans le 1er post) les info avec mes identifiants X et Y je les copies dans un tableau destination. Je ferme le tableau source, j'ouvre l'année suivante et ainsi de suite .... Je marque les lignes sélectionnées par un 1 dans la première colonne vide la n°25

Voici le début de mon code (dès que mon problème de sélection est résolu, j’écris le, reste )

Sub AppelConsommation()

Call OuvertureTotal2012

Call Selection

End Sub

Sub OuvertureTotal2012()

Application.ScreenUpdating = False

Application.Workbooks.Open ("D:\Total2012.xlsx")

Columns.AutoFit

End Sub

Sub Selection()

Dim X As String

Dim Y As String

Dim i As Long

i = 1

Windows("Total2012").Activate

Sheets("Total2012").Select

X = Application.InputBox("X,")

Y= Application.InputBox("Y?")

While Not IsEmpty(Cells(i, 1))

If Cells(i, 1) = X And Cells(i, 2) = Y Then

Cells(i, 25) = 1

End If

i = i + 1

Wend

End Sub

Je ne sais pas trop si j'ai été clair...

Amicalement

Jean-François


Bonsoir Frangy

Mon but est de tout automatiser pour des "handicapés d'excel"

Perso j'utiliserai un flitre et un copier-coller.

Je ne comprends pas le coup du press-papier. Pourquoi les lignes sélectionnées ne sont-elles pas mises en surbrillance commequand on sélectionne la source de données pour un tableau croisé dynamique?

Merci de ton aide

Amicalement

Jean-François

Mon but est de tout automatiser.

Perso j'utiliserai un filtre et un copier-coller.

Tu peux très bien faire cela via macro pour que ce soit transparent pour l’utilisateur.

Je ne comprends pas le coup du presse-papier. Pourquoi les lignes sélectionnées ne sont-elles pas mises en surbrillance comme quand on sélectionne la source de données pour un tableau croisé dynamique?

Parce que les plages copiées ne sont pas réunies avec l’instruction copy.

Fais ce test.

Sub tst()
Dim i As Long
Dim MaPlage As Range
    i = 1
    While Not IsEmpty(Cells(i, 3))
        If Cells(i, 25).Value = 1 Then
            If n > 0 Then
                Set MaPlage = Application.Union(MaPlage, Rows(i))
            Else
                Set MaPlage = Rows(i)
                n = n + 1
            End If
            MaPlage.Copy
        End If
        i = i + 1
    Wend
End Sub  

A+

MERCI FRANGY !

C'est génial! Non seulement cela fonctionne parfaitement mais en plus c'est rapide.

Vraiment sympa

Bonne soirée

Jean-François qui va écrire la suite de la macro.

Rechercher des sujets similaires à "selection lignes tableau"