Remplacer formules par valeurs sur plage filtrée

Bonjour à tous,

J'ai un bout de code avec lequel je voudrais remplacer sur une plage filtrée les formules par les valeurs.

Seulement le code parcours même les lignes non filtrées et donc remplace les formule des lignes cachées, ce que je ne souhaite pas.

Voici le bout de code concerné:

Sub Copie_vers_DB()
Dim dlg As Integer
Dim plage As Range, ligne As Range
Dim dlg1&, lig&: Application.ScreenUpdating = 0

With Sheets("Bom Prices")
    dlg = .Range("A" & Rows.Count).SpecialCells(xlCellTypeVisible).End(xlUp).Row
    Set plage = .Range("$A$2:$A" & dlg).SpecialCells(xlCellTypeVisible)

    Columns.EntireColumn.Hidden = False
    Rows.EntireRow.Hidden = False

    If .AutoFilterMode = False Then .Range("A1:L1").AutoFilter
    On Error Resume Next
    plage.AutoFilter Field:=12, Criteria1:="<>To do", Operator:=xlAnd, Criteria2:="<>"

    For Each ligne In plage
        With ligne
    .EntireRow.Formula = .EntireRow.Value2
        End With
    Next ligne

Merci d'avance pour votre éclairage

Bonjour

Essayez en remplaçant cette partie dans le code posté

With Sheets("Bom Prices")

    .Columns.EntireColumn.Hidden = False

    If .AutoFilterMode = False Then .Range("A1:L1").AutoFilter
    On Error Resume Next
    .ShowAllData
    dlg = .Range("A" & Rows.Count).End(xlUp).Row
    Set plage = .Range("A2:L" & dlg)
    plage.AutoFilter Field:=12, Criteria1:="<>To do", Operator:=xlAnd, Criteria2:="<>"

    dlg = .Range("A" & Rows.Count).SpecialCells(xlCellTypeVisible).End(xlUp).Row
    Set plage = .Range("A2:A" & dlg).SpecialCells(xlCellTypeVisible)

    For Each ligne In plage
        If .Rows(ligne).EntireRow.Hidden = False Then 'EDIT
            .EntireRow.Formula = .EntireRow.Value2
        End If 'EDIT
    Next ligne

A voir parce que sans fichier...

Cordialement

Ok il y a deux fois le "Set plage" par contre c'est normal ?

Je viens de tester, les formules sautent toujours sur les lignes cachées...

Je viens de tester, les formules sautent toujours sur les lignes cachées...

reprenez le code dans mon post précédent, j'ai ajouté un IF END IF dans la boucle
J'ai ajouté EDIT

Non plus.

En pas à pas, le code passe une fois jusqu'à "Next ligne" puis revient sur "For each...", passe une seconde fois le code pour ensuite le terminer.

Sans agir sur la plage souhaitée donc. Rien ne se passe.

Vous avez bien cette ligne dans le code ? car j'ai ajouté ROWS aussi

If .Rows(ligne).EntireRow.Hidden = False Then 'EDIT

J'ai ce code.

J'ai enlevé la ligne Set plage en doublon le code est maintenant bien parcours et les lignes aussi, mais aucun remplacement de formules ne se fait.

With Sheets("Bom Prices")

    .Columns.EntireColumn.Hidden = False

    If .AutoFilterMode = False Then .Range("A1:L1").AutoFilter
    On Error Resume Next
    .ShowAllData

    dlg = .Range("A" & Rows.Count).SpecialCells(xlCellTypeVisible).End(xlUp).Row
    Set plage = .Range("A2:A" & dlg).SpecialCells(xlCellTypeVisible)

    plage.AutoFilter Field:=12, Criteria1:="<>To do", Operator:=xlAnd, Criteria2:="<>"

    For Each ligne In plage
        If .Rows(ligne).EntireRow.Hidden = False Then 'EDIT
            .EntireRow.Formula = .EntireRow.Value2
        End If 'EDIT
    Next ligne

Hum... je suis allé trop vite mais bon sans fichier... faut tout refaire

Essayez comme ceci

With Sheets("Bom Prices")

    .Columns.EntireColumn.Hidden = False

    If .AutoFilterMode = False Then .Range("A1:L1").AutoFilter
    On Error Resume Next
    .ShowAllData

    dlg = .Range("A" & Rows.Count).SpecialCells(xlCellTypeVisible).End(xlUp).Row
    Set plage = .Range("A2:A" & dlg).SpecialCells(xlCellTypeVisible)

    plage.AutoFilter Field:=12, Criteria1:="<>To do", Operator:=xlAnd, Criteria2:="<>"

    Dim i As Integer
    For i = 1 To plage.Rows.Count
        If .Rows(i).Hidden = False Then
            .Rows(i).Value = .Rows(i).Value2
        End If
    Next i

crdlt

Ca fonctionne, merci !!

Par contre c'est dommage le code parcours quand même les lignes masquées au lieu de se concentrer sur les lignes filtrées.

Ok alors dans le code remplacez les lignes Dim i as integer ....next i par ceci

Dim c As Range

For Each c In plage.SpecialCells(xlCellTypeVisible)
    .Range("A" & c.Row).EntireRow.Value = .Range("A" & c.Row).EntireRow.Value2
Next c

Crdlt

Rechercher des sujets similaires à "remplacer formules valeurs plage filtree"