Coller (et non pas copier) range dans une range filtrée

Bonjour à tous.

Je sèche sur la façon de coller une plage de valeurs dans une plage filtrée (coller pas copier).

En fait, j'ai appliqué un filtre sur une colonne B.

Le résultat du filtre, dans la colonne C, m'affiche des valeurs qui sont pleines de retours chariots et d'espaces superflus.

J'ai donc copié toutes les valeurs filtrées de la colonne C dans une feuille vierge, puis j'ai effectué le traitement de suppression des retours chariot et des espaces superflus et je voudrais venir coller cette plage "épurée/nettoyée" dans sa colonne C d'origine mais TOUJOURS filtrée.

J'ai regardé mais je ne trouve pas et la majorité des fils sur le net concernent le copier.

Je suis obligé d'appliquer un filtre car je ne peux pas effectuer le "nettoyage" de toutes les cellules (sinon ce serait trop simple).

Je ne sais même pas comment récupérer l'adresse de la première ligne filtrée (j'y arrive si j'applique aussi un filtre sur cette colonne C en faisant une recherche sur la valeur du filtre).

Je vais tenter une boucle avec une propriété hidden = true, à tout hasard...

Si vous avez des idées, je suis preneur.

Merci d'avance pour vos idées.

Bonne après-midi.

Bonjour,

Voici un exemple pour trouver la première et dernière ligne de la plage filtrée,

Sub premiere_et_derniere_Lignes_filtrées()
Dim Plg As Range, x As Variant, x1 As String, xx As String
Set Plg = ActiveSheet.Range("_filterdatabase").SpecialCells(xlCellTypeVisible)
x = Split(Plg.Address, ",")
If Not UBound(x) = 0 Then
  If Not Range(x(0)).Rows.Count > 1 Then
   x1 = Range(x(1)).Row             ' premiere ligne filtrée
   xx = Range(x(UBound(x))).Row             ' derniere ligne filtrée
  Else
  y = Split(Plg.Address, ":")
  x1 = Range(y(1)).Row             ' premiere ligne filtrée
  xx = Range(y(UBound(y))).Row     ' derniere ligne filtrée
  End If
 MsgBox "première ligne filtrée : " & x1 & Chr(10) & "dernière ligne filtrée : " & xx
End If
End Sub

Bonjour SabV.

Merci pour votre intervention et le code que vous me proposez.

Comme j'ai pu l'écrire dans la fin du message, et dicté par "l'urgence", je me suis penché sur la solution d'une boucle qui parse les cellules /visibles et non visibles.

Je suis parvenu à mes fins de la façon suivante:

Sub CollerDans PlageFiltree ()

Dim i, compteur, nbLine as Integer
'Sheet_ou_je_copie est la sheet d'où sont extraites les cellules filtrées pour pouvoir les traiter puis dans laquelle il faut coller les valeurs traitées
Dim Sheet_ou_je_copie as worksheets
'Sheet_ou_je_colle est la sheet "tampon" où sont traitées les valeurs et qu'il faut ensuite copier puis coller dans la plage filtrée de la Sheet_ou_je_copie
Dim Sheet_ou_je_colle as worksheets
Dim Valeur_cellule as Boolean

nbLine  = Sheet_ou_je_colle.UsedRange.Rows.Count 'nb de lignes trouvées dans la UsedRange

compteur = 1
For i = 1 To nbLine - 1 ' nbLine -1 pour la tétière
    Valeur_cellule = Sheet_ou_je_colle .Rows(16 + i).Hidden 'variable permettant de savoir si la ligne est cachée par le filtre ou non
    Do While Valeur_cellule = False
        Sheet_ou_je_colle .Range("A" & i).Value = Sheet_ou_je_copie .Range("A" & compteur + 1).Value
        compteur = compteur + 1
        Valeur_cellule = True
    Loop
Next
End Sub

Je me suis affranchi de chercher absolument les adresses de la première et dernière ligne de la plage filtrée car, en fin de compte, je ne suis pas sûr que cela m'aurait été utile pour coller mes données.

Enfin, j'ai lu votre code mais je n'ai pas encore assez d'expérience pour le "comprendre" rapidement du premier coup d'oeil: il va falloir que je le "digère" mais je crois avoir saisi la "philosophie" globale de celui-ci.

Merci encore pour le temps que vous avez passé pour moi.

Bonne journée.

Rechercher des sujets similaires à "coller pas copier range filtree"