Copier plage filtrée

bonjour tout le monde

svp j'ai un tableau avec deux colonnes A et B. La colonne A ne contient pas des cellules vides La colonne B contient quelques cellules vides.

je veux appliquer un filtre sur la colonne B selon le critère de la textbox1. une fois le filtre appliqué je veux copier la plage filtrée sur la colonne B de la feuille 2.

Si jamais la plage copiée contient une cellule vide je veux récupérer la valeur de la colonne A sur cette cellule.

j'espère que c'est assez clair

Merci d'avance

Bonjour,

Un truc qui me chiffonne ... si tu filtres colonne B, a priori tu choisis une valeur (et pas un vide !). Ou alors tu filtres sur vide et tu récupère alors la colonne A !

Tout a fait steelson je me suis trompé

le filtre sera appliqué sur la colonne A non B. et la plage filtrée à copier et celle de la colonne B. si jamais y'a du vide sur B il récupère la valeur de A

Merci

le voila

Merci pour ton aide

10classeur1.xlsm (16.31 Ko)

Toujours un peu compliqué de travailler avec un userform, surtout quand il y a une date !

Private Sub CommandButton1_Click()
    filtrercopier (TextBox1.Text)
    Unload Me
End Sub
Sub filtrercopier(quand As String)
    Sheets(2).Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    If quand = "" Then
        On Error Resume Next
        ActiveSheet.ShowAllData
        Exit Sub
    End If
    ladate = Split(quand, "/")
    ActiveSheet.Range("A1:B" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(2, ladate(1) & "/" & ladate(0) & "/" & ladate(2))

    ligne = 2
    For i = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
        With Sheets(2)
            If Cells(i, 1) = CDate(quand) Then
                .Cells(ligne, 1) = Cells(i, 1)
                .Cells(ligne, 2) = IIf(Cells(i, 2) = "", Cells(i, 1), Cells(i, 2))
                ligne = ligne + 1
            End If
        End With
    Next

End Sub
13classeur1.xlsm (20.84 Ko)

Merci bcp Steelson

la maintenant je veux recopier sur mon vrai projet avec plus de détail voila l'acheminement

1. j'ouvre mon userform1 je renseigne deux dates : une date début (txtbox1) et une date fin (txtbox2).

2. je clique sur le bouton "Importer" pour exécuter les commandes suivantes :

Si txtbox1 et txtbox2 ne sont pas en format date : msgbox "merci de revoir les dates"

Si date début est >= à date fin : msgbox "merci de revoir les dates"

Si date début est < au 02/01/2020 :msgbox "merci de revoir les dates"

Si date fin est > à date d'aujourd'hui : msgbox "merci de revoir les dates"

Sur la feuil1 effacer le contenu des colonnes D; E; Q; V; X; Z et AA (sans effacer les entêtes et le contenu des autres colonnes)

Sur la feuil2 appliquer un filtre sur la colonne G pour désélectionner les cellules vides

Sur la feuil2 appliquer un filtre sur la colonne B selon les dates renseignées sur le userform

Sur la feuil2 appliquer un filtre sur la colonne D pour désélectionner les cellules qui contiennent le mot "SICAV"

Sur la feuil2, si une cellule est vide dans la colonne E copier la valeur de la cellule de la colonne D

Copier la colonne E de la feuil2 et la coller valeurs dans la colonne D de la feuil1(sans les entêtes et coller à partir de la linge2)

Copier la colonne G de la feuil2 et la coller valeurs dans la colonne Q de la feuil1(sans les entêtes et coller à partir de la linge2)

Copier la colonne B de la feuil2 et la coller valeurs dans la colonne V de la feuil1(sans les entêtes et coller à partir de la linge2)

Sur la feuil1 si une cellule de la colonne D contient le mot "remise" copier la valeur de cette cellule dans la colonne AA

Sur la feuil1 si une cellule de la colonne D contient le mot "remise" couper la valeur de la colonne V et la copier dans la colonne W

remplissage en jaune de toutes les lignes non vides de la feuil1

Voilà mon fichier final merci pour ton aide précieuse

Il ne faut utiliser ni les filtres, ni les userform ... je regarderai à une autre solution si j'ai un eu plus de temps.

Pourquoi effacer ceci D; E; Q; V; X; Z et AA et pas les autres colonnes ? Y a t-il des formules ? si oui, il faut alors mettre les données finales en tableau.

J’ai utilisé le userform car c’est un gestionnaire qui devrait travailler dessus et je devrai verrouiller les cellules en écritures car les autres colonnes contiennent des formules

Quel serait l’autre solution à part les filtres et le userform ?

Merci bcp pour ton aide

Et l'autre question ?

Pourquoi effacer ceci D; E; Q; V; X; Z et AA et pas les autres colonnes ? Y a t-il des formules ?

Exact steelson ils contiennent des formules assez longues avec des liaisons. si je les laisse sur le fichier il devient très volumineux du coup je pourrai pas l'uploader

Copier la colonne E de la feuil2 et la coller valeurs dans la colonne D de la feuil1(sans les entêtes et coller à partir de la linge2)

Sur la feuil1 si une cellule de la colonne D contient le mot "remise" copier la valeur de cette cellule dans la colonne AA

Sur la feuil1 si une cellule de la colonne D contient le mot "remise" couper la valeur de la colonne V et la copier dans la colonne W

Ce n'est pas possible puisqu’on vient de mettre en D de la feuille 1 une date !

Sur la feuil1 si une cellule de la colonne D contient le mot "remise" copier la valeur de cette cellule dans la colonne AA

La valeur de quelle cellule ?

J'ai tenté de faire un code suffisamment clair pour que tu puisses l'aménager toit-même.

Je n'ai pas appliqué le filtre dans la feuil2, est-ce utile ?

Sub copier(depuis As String, jusque As String)
Set ws = Sheets(2)

    ' effacement colonnes
    Tcol = Array("D", "E", "Q", "V", "X", "Z", "AA")
    derL = Range("B1").CurrentRegion.Rows.Count - 1
    For Each col In Tcol
        If derL > 2 Then Range(Cells(2, col), Cells(derL, col)).ClearContents
    Next

    ' contrôle dates
    If depuis = "" Or jusque = "" Then MsgBox "Pas de date !": Exit Sub
    If CDate(depuis) > CDate(jusque) Then MsgBox "Dates incorrectes !": Exit Sub
    If CDate(depuis) < CDate("2/1/2020") Then MsgBox "Revoir date de début !": Exit Sub
    If CDate(jusque) > Date Then MsgBox "Revoir date de fin !": Exit Sub

    ' import
    derL = ws.Cells(Rows.Count, "A").End(xlUp).Row
    ligne = 2
    For i = 2 To derL
        If ws.Cells(i, "B") >= CDate(depuis) And ws.Cells(i, "B") <= CDate(jusque) Then
            If Not ws.Cells(i, "D") Like "*SICAV*" Then
                If ws.Cells(i, "G") <> "" Then
                    Cells(ligne, "D") = IIf(ws.Cells(i, "E") = "", ws.Cells(i, "D"), ws.Cells(i, "E"))
                    Cells(ligne, "Q") = ws.Cells(i, "G")
                    If ws.Cells(i, "D") Like "*REMISE*" Then
                        Cells(ligne, "AA") = ws.Cells(i, "D")
                        Cells(ligne, "W") = ws.Cells(i, "B")
                    Else
                        Cells(ligne, "V") = ws.Cells(i, "B")
                    End If
                    ligne = ligne + 1
                End If
            End If
        End If
    Next

End Sub
Rechercher des sujets similaires à "copier plage filtree"