IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sélection de lignes dans un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut Sélection de lignes dans un tableau
    Bonjour à tous,

    Cela fait un bon moment que je suis inscrit sur ce merveilleux site et d’ordinaire la consultation des tutoriels ou du forum ( sans compter l'enregistreur de macros) m'apportait la solution à mes problèmes. 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. J'ai écrit deux macros différentes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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 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 pur votre aide

    Amicalement
    Jean-François

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    1 000 000 de lignes ouf...
    Alors déjà, évite les "Select" si tu veux que ça prenne le moins de temps possible.
    Maintenant, il faudrait que tu nous en dise un peu plus sur ce que tu veux faire car dans ton code, après la copie, il n'y a plus aucune action qui est faite !!! Donc, que faire de cette copie ?
    Selon le cas, l'utilisation d'un tableau est peut être judicieuse afin de gagner du temps.

    Hervé.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Bonjour Theze

    Merci pour ta réponse rapide.

    Comment expliquer simplement....

    J'ai un tableau par année depuis 2002 où sont stockées des informations concernant des individus. Ces individus ont deux identifiants (X et Y) et sont donc uniques (c 'est pourquoi je parlais d'access...). Mon but est de faire un tableau réunissant les informations d'un même individu sur toutes les années de 2002 à 2012.

    Donc la portion de code que je cherche consiste à sélectionner les lignes concernant un individu dans une année pour les copier dans un tableau de synthèse de toutes les années.

    Voici le début de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub AppelConsommation()
     
        Call OuvertureTotal2012
        Call Selection
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub OuvertureTotal2012()
     
        Application.ScreenUpdating = False
        Application.Workbooks.Open ("D:\Total2012.xlsx")
        Columns.AutoFit
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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
    Amicalement
    Jean-François

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    lequel compte le plus dans l'importance d'un tableau, le nombre de lignes ou le nombre de cellules ?

    1 M de lignes à 3 colonnes ou à 100, ça change....

    En indiquant la version de ton Excel dans le titre, tu auras aussi des réponses plus significatives, sous 2010, tu aurais peut-être intérêt à te pencher sur l'addin PowerPivot

    Sinon, dès que les données sont nombreuses tu as intérêt à éviter les boucles quel quelles soient car elles sont chronophages.

    Dans un cas comme le tien passer par un filtre auto ou avancé, à un stade donné, pour récupérer les données voulues serait surement bien plus rapide.
    Pour exemple, sur un fichier de données de villes de 146 727 lignes et 2 346 687 cellules, je récupère une table de 2329 lignes et 37 249 cellules en l'espace de moins d'une seconde avec une extraction vers autre emplacement d'un filtre avancé...

    Les filtres sont compatibles avec l'enregistreur de macros qui donne tous les mots clefs si besoin.

    cordialement,

    Didier

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Bonsoir Didier,

    Merci de te pencher sur mon problème.

    Mes fichiers font plus d'un million de lignes et 26 colonnes....

    Le facteur temps est donc primordial dans la mesure où les bécanes de ma boîte ne sont pas des bêtes de courses.

    Je vais suivre ton conseil et explorer la voie des filtres.

    Je te tiens au courant.

    Amicalement
    Jean-François

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Re Bonsoir


    Merci mille fois pour ton conseil avisé

    Un exemple qui fonctionne rapidement et facile à programmer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Worksheets("Total2012").Cells(1, 3).AutoFilter Field:=3, Criteria1:=Ident
    Amicalement
    Jean-François

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Sélection de ligne d'un tableau et rangement dans une feuille de calcul
    Par nysay27 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/07/2015, 08h22
  2. Sélection de lignes dans un tableau
    Par circe dans le forum R
    Réponses: 7
    Dernier message: 12/08/2009, 15h20
  3. Réponses: 1
    Dernier message: 20/10/2008, 21h57
  4. sélection de lignes dans un tableau
    Par schwarzy2 dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 17h23
  5. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo