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 :

Récupérer des lignes d'une autre feuille selon condition [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Décembre 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Décembre 2015
    Messages : 31
    Par défaut Récupérer des lignes d'une autre feuille selon condition
    Bonjour,

    J'ai des lignes dans une feuille de Calcul que je dois transférer dans une autre feuille Alertes.

    Ces lignes de la feuille Calcul vont de la colonne BM6 à BT6.

    Les lignes à transférer peuvent être variables. Il peut en avoir 0, comme il peut en avoir 1000 par exemple.

    Le transfert de ces lignes se fait selon la valeur d'une colonne BU6 de la feuille calcul.

    Exemple :

    si BU6 = A, alors transfère la ligne BM6 à BT6 dans la feuille Alerte à partir de C6 jusqu'à J6
    si BU7 = A, alors transfère la ligne BM7 à BT7 dans la feuille Alerte à partir de C7 jusqu'à J7
    Et ainsi de suite

    J'ai un début de code d'une macro que j'avais qui faisait quelques chose un peu du mêm genre, mais sans la condition
    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
     
    Sub transfert_des_A()
        Application.ScreenUpdating = False
     
        dlf_final = Range("b" & Rows.Count).End(xlUp).Row
     
            If dlf_final > 6 Then
     
            With Sheets("Calcul")
                dlf_Alertes = .Range("b" & Rows.Count).End(xlUp).Row + 1
                Range("bm6:bt" & dlf_final).Copy
     
     
            End With
            MsgBox "Opération effectuée avec succés", 64, "Statut"
        Else
            MsgBox "Avertissement : rien à transférer", 64, "Statut"
        End If
    End Sub


    Merci de votre aide, car je bloque depuis un moment
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je te conseille d'utiliser un filtre avancé avec export des données

    voici un tutoriel au sujet de cet outil : http://philippetulliez.developpez.co...dvancedfilter/

    teste manuellement son utilisation, et si ensuite tu as du mal à l'utiliser par VBA, reviens avec le code que tu as commencé.
    au vu de la structure de ton fichier, tout est déjà en place, donc le code VBA va prendre 5 lignes

  3. #3
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Décembre 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Décembre 2015
    Messages : 31
    Par défaut Merci, mais cela ne m'aide pas beaucoup
    d'autant plus que je suis débutant en VBA.

    Mais, merci quand même.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je mentionne un outil EXCEL qui se met en place en 5 clics

    je t'ai proposé de consulter un tutoriel INTUITIF et COMPLET sur sa mise en place et ses possibilités

    je t'ai invité à tester sa mise en place manuellement pour voir comment ça fonctionne

    j'enchaine sur le fait que si ça te convient, tu peux essayer de l'automatiser (il y a un exemple clair à la fin du tutoriel)

    je conclue que si tu as des difficultés, tu peux demander conseil et expliquer ce qui coince, en montrant ton code pour qu'on t'épaule. En te rassurant sur le fait qu'il n'y aura vraiment pas beaucoup de lignes de codes

    tu réponds que c'est pas la peine car tu es débutant. Pourtant c'est justement un "pas à pas" de débutant que je t'ai proposé.

    c'est dommage de voir quelqu'un se fermer une porte si facilement

    Ne voulant pas te laisser dans la panade, j'ai écrit une autre méthode, en utilisant les filtres automatiques ... qui me semble assez cohérente pour fonctionner, et sur lequel j'ai buté 5 bonne minutes avant de comprendre pourquoi le code plantait.... en fait il fonctionnerait très bien je pense si ta plage ne contenait pas un TCD "camouflé" sur la majeure partie de ses colonnes (et pas les autres)

    et là du coup, je me suis arrêté devant ce grand mystère
    je te laisse quand même le code, faut pas gâcher

    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
    Sub FiltreAuto()
    Dim Plage As Range
        With ThisWorkbook.Worksheets("Calcul")
            ' la plage complète (sans les titres)
            With .Cells(6, 65)
                Set Plage = .Resize(.CurrentRegion.Rows.Count, .CurrentRegion.Columns.Count - 2)
            End With
     
            With .Cells(5, 65)
                .AutoFilter
                ' on met un filtre automatique pour afficher uniquement les lignes contenant le A
                .AutoFilter 9, "A"
                ' on copie le résultat du filtre vers Alertes à partir de C6
                Plage.SpecialCells(xlCellTypeVisible).Copy _
                                ThisWorkbook.Worksheets("Alertes").Cells(6, 3)
     
                ' on retire les filtres automatiques
                .AutoFilter
            End With
        End With
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Décembre 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Décembre 2015
    Messages : 31
    Par défaut Merci beaucoup pour ce code
    J'ai regardé le tutoriel, mais je suis assez pris par le temps en ce moment, et je ne peux hélas trop m'attarder.

    Sinon, voici une autre solution de code qui fonctionne également.

    Je rassure tout de suite, ce n'est pas moi qui l'est fait
    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
    24
     
    Sub AlertesA()
     
        tablo = Sheets("Calcul").Range("BM6:BV" & Sheets("Calcul").Range("BM" & Rows.Count).End(xlUp).Row)
        k = 0
        ReDim tabloR(8, 1)
        For i = 1 To UBound(tablo, 1)
            If tablo(i, 9) = "A" Then
                ReDim Preserve tabloR(8, k + 1)
                For j = 1 To 8
                    tabloR(j - 1, k) = tablo(i, j)
                Next j
                k = k + 1
            End If
        Next i
        Call Effacer
        Sheets("Alertes").Range("C6").Resize(UBound(tabloR, 2), 8) = Application.Transpose(tabloR)
        If Sheets("Alertes").Range("C6") = "" Then
            MsgBox "Rien à transférer", 48, "Vérif"
            Sheets("Alertes").Range("C6") = "Rien à transférer"
        End If
        Erase tabloR
        Erase tablo
    End Sub
    Merci encore pour le code que vous avez fait, et que je regarderais de toute façon.

    Je vous souhaite un bon week end

    Merci encore

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Le principal est que tu ai ta solution.

    Par contre, puisqu'il y a manipulation des tableaux (ce qui est plus complexe à maîtriser qu'un filtre), assure toi de bien en maîtriser l'usage

    tu auras tout ce qu'il faut pour les appréhender ici : http://silkyroad.developpez.com/vba/tableaux/

  7. #7
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Décembre 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Décembre 2015
    Messages : 31
    Par défaut Merci pour le lien, qui est très interessant
    en effet, j'utilise tout le temps les tableaux dans ce que je fais, TCD ou tableaux classiques.

    Bon week end

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

Discussions similaires

  1. [Toutes versions] Vba: Copier des lignes sur une autre feuille
    Par yassxavi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/02/2015, 11h48
  2. Copier des lignes dans une autre feuille sous condition
    Par Maya06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2014, 20h57
  3. [XL-2003] Copier des lignes dans une autre feuille à la première ligne vide
    Par PasDan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/09/2010, 13h34
  4. Déplacer des lignes dans une autre feuille
    Par dj-julio dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 22/11/2007, 09h24
  5. Excel-copier des lignes sur une autre feuille
    Par petecul dans le forum Excel
    Réponses: 7
    Dernier message: 13/09/2007, 02h56

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