VBA copier/coller une plage de cellule particulière

Bonjour à tous,

Besoin d'aide pour écrire un code vba :

Je voudrais que le code sélectionne seulement les valeurs écrivent de couleur rouge dans la plage de cellule C2:J348.

Puis une fois les valeurs rouge sélectionnées faire copier et collage spéciale en format nombre ( pour enlever les formules)

Merci pour votre aide

Bonjour,

Voici un essai où les résultats sont collés sur une nouvelle feuille, en colonne :

sub test()
dim t()
with activesheet.range("C2:J348")
    for i = 1 to .rows.count
        for k = 1 to .columns.count
            if .cells(i, k).font.colorindex = 3 then   'if .cells(i, k).font.color = 255 then
                n = n + 1: redim preserve t(1 to n): t(n) = .cells(i, k).value
            end if
        next k
    next i
end with
if n > 0 then
    with sheets.add(after:=sheets(sheets.count))
        .cells(1) = "Résultats"
        .cells(2, 1).resize(n) = application.transpose(t)
    end with
else
    msgbox "Aucune correspondance"
end if
end sub

Cdlt,

bonjour 3G, le fil,

le code est okay, mais si le font est conditionel, il faut encore ajouter "DisplayFormat"

merci beaucoup,

Comment faire pour ne pas que ce soit coller sur une nouvelle feuille mais sur la même au même emplacement et en format nombre?

En fait, je voudrais sélectionner toutes les cellules dont la valeur est rouge dans la plage de donnée (C8:J384) Comment faire ?

Re, bonjour BsAlv,

Voici une adaptation du code en tenant compte de votre besoin et de la juste remarque de BsAlv au sujet de la possibilité d'une MFC :

sub test()
dim r as range
with activesheet.range("C8:J384")
    for i = 1 to .rows.count
        for k = 1 to .columns.count
            if .cells(i, k).displayformat.font.colorindex = 3 then
                if r is nothing then set r = .cells(i, k) else set r = union(r, .cells(i, k))
            end if
        next k
    next i
end with
if not r is nothing then
    r.value = r.value
else
    msgbox "Aucune correspondance"
end if
end sub

Cdlt,

Bonjour, merci pour votre réponse mais cela ne fonctionne pas. Les valeurs dont la police est rouge ne sont pas sélectionnées

En fait, elles sont normalement, si le colorindex correspond bien, transformées en valeur directement, sans sélection préalable étant donné que c'est une étape dont on peut se passer.

Regardez tout de même si les formules sont toujours présentes dans les cellules en question car j'imagine que ce n'est pas le cas si vous n'avez pas eu le message "Aucune correspondance".

Cdlt,

Ci-joint un exemple :

1)il faudrait que la macro ne sélectionne que les valeurs en rouge

2)une fois les valeurs en rouge sélectionnées il faudrait faire copier coller en nombre pour supprimer les formules et coller en dur

J'espere que c'est plus claire

5exemple2.xlsx (15.46 Ko)

Pouvez-vous essayer ce code qui fonctionne (testé à l'instant) mais s'exécute un peu plus lentement :

Sub test()
With ActiveSheet.Range("C8:J384")
    For i = 1 To .Rows.Count
        For k = 1 To .Columns.Count
            If .Cells(i, k).DisplayFormat.Font.ColorIndex = 3 Then
                n = n + 1
                .Cells(i, k).Value = .Cells(i, k).Value
            End If
        Next k
    Next i
End With
If n = 0 Then MsgBox "Aucune correspondance"
End Sub

L'ancien code collait bien les valeurs mais seulement de la première cellule de la plage des cellules en rouge...

Cdlt,

Rechercher des sujets similaires à "vba copier coller plage particuliere"