VBA: Copie lignes/Colonnes sous condition

Bonjour à toutes et tous.

Je débute avec VBA.

Je désire copier des lignes d'une feuille avec certaines colonnes dans une autre feuille sous condition.

Je m'explique:

J'ai, par exemple un tableau avec les colonnes: ID / Nom / Prenom / Type / Numero dans la feuille "source":

Si dans la ligne le mot "C14" est présent dans la colonne "Type" alors copie la ligne avec les colonnes ID, Nom et Numero dans la feuille "cible":

Je sais copier la ligne en fonction du critère "C14" puis ensuite effacer les colonnes non désirées...

Le problème est que le nombre de colonne dans mon onglet "source" peut être modifié et que la position de ma colonne peut donc changer de place...

L’idéal serait de passer par un tableau (array), mais là j'avoue que je bloque.

Comment avoir toutes les lignes "C14" quelle que soit la position de la colonne "Type",ici en D mais peut-etre en K ou AZ etc...

Pour info: Le nb de lignes varie aussi.

Si quelqu'un peut m'orienter.

Merci à vous et bonne fin de semaine.

Bonjour et bienvenue sur le forum

Un essai. Te convient-il ?

39classeur1.xlsm (17.74 Ko)

Bonjour gmb et merci beaucoup pour ta réponse rapide.

J'ai deux petits soucis:

Si la colonne "Type" ou se trouve le critère "C14" ne se trouve pas en D, cela ne fonctionne plus.

Les titres des colonnes n'est pas reporté sur l'onglet de destination

Merci en tout cas pour le temps que tu m'as consacré !

Nouvelle version à tester.

La place de toutes les colonnes de la feuille de départ peut être modifiée.

Cela te va-t-il ?

72classeur-v2.xlsm (18.73 Ko)

Je suis impressionné, content, frustré et... jaloux !!!

Si j'avais le niveau....

Bref, génial, je vais me pencher sur ce que tu m'as donné pour essayer d'évoluer peu.

Merci beaucoup pour ton aide gmb et le temps que tu m'as consacré !!!

Bonjour le forum,

Comme ce sujet est "résolu" et merci encore à gmb pour ça, je ne sais pas si il est plus judicieux d'ouvrir un nouveau sujet ou pas...

La solution (voir ci-dessous) de gmb fonctionne impeccablement et est assez claire pour mes deux neurones mais je l'applique sur des onglets d'env 250 colonnes et 1500 lignes...

Ce qui provoque des traitements de plusieurs minutes et je me demandais si il y avait une méthode différente pour gagner en vitesse d’exécution.

Dim col_ID, col_Nom, col_Prenom, col_Type, col_Numero, coln
Dim ln, lgn
Sub Exporter()

    With Sheets("Feuil2")
        .Range("A1").CurrentRegion.ClearContents
        col_ID = Rows("1:1").Find("ID", lookat:=xlWhole).Column
        col_Nom = Rows("1:1").Find("Nom", lookat:=xlWhole).Column
        col_Prenom = Rows("1:1").Find("Prénom", lookat:=xlWhole).Column
        col_Type = Rows("1:1").Find("Type", lookat:=xlWhole).Column
        col_Numero = Rows("1:1").Find("Numéro", lookat:=xlWhole).Column

        Cells(1, col_ID).Copy .Range("A1")
        Cells(1, col_Nom).Copy .Range("B1")
        Cells(1, col_Numero).Copy .Range("C1")

        For ln = 2 To Range("A" & Rows.Count).End(xlUp).Row
            If Cells(ln, col_Type) = "C14" Then
                lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row
                Cells(ln, col_ID).Copy .Cells(lgn, "A")
                Cells(ln, col_Nom).Copy .Cells(lgn, "B")
                Cells(ln, col_Numero).Copy .Cells(lgn, "C")
            End If
        Next ln
    End With
End Sub

Merci beaucoup pour vos lumières.

Bonjour,

Tu peux insérer en tout début de ton code :

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

et à la toute fin de ton code, le "retour à la normale"

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Hello James007

Oui ca je l'ai déjà fait

merci quand-meme

CMal a écrit :

Hello James007

Oui ca je l'ai déjà fait

merci quand-meme

Parfait ... !!!

Alors, à ce stade, les deux étapes suivantes :

1. Nettoyage des feuilles ... reliquats de lignes et colonnes vides ...

2. Auditer les formules pour optimisation ...

Rechercher des sujets similaires à "vba copie lignes colonnes condition"