VBA remplacer la valeur d'une cellule par une autre valeur

Résolu/Fermé
Jerome - Modifié le 15 août 2022 à 20:07
 Jerome - 16 août 2022 à 18:27

Bonjour la communauté,

Je viens de nouveau solliciter votre aide. Je vais essayer d'être précis car j'ai du mal à tourner ma demande.

En effet, j'ai une macro qui trouve deux noms de colonnes (via boucle) et filtre ces deux colonnes selon ma demande. Ex : Filtre sur ma colonne nommée "GAM" (avec un critère) et filtre sur ma colonne nommée "Attribution" (avec un critère)

Ces deux filtres renvoient ou pas à des lignes. Si c'est le cas, j'aimerais modifier le nom des lignes retrouvées avec les deux filtres par une autre valeur. Si par contre ça ne retrouve aucune ligne, je ne veux rien modifier. Ex : Colonne "GAM" filtré sur Codé + colonne "Attribution" filtré sur Sans frais. Imaginons dans cette exemple, j'ai 4 lignes, ce que je souhaiterais, c'est modifier les lignes de la colonne "Attribution" (actuellement avec la valeur Sans frais) par "Absent"

Ma première difficulté est que je ne sais pas si ça me renvoie des lignes ou pas ? La seconde est de réussir à modifier toutes les valeurs des lignes qui seraient retrouvées.

J'ai bien essayé quelques choses mais je n'y arrive pas. En gros après mes boucles et filtres, j'ai commencé par sélectionner le nom de colonne nommé "attribution" par le code ci dessous (enregistreur automatique)

              Cells.Find(What:="Attribution", After:=ActiveCell, LookIn:=xlFormulas, _
              LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
              MatchCase:=False, SearchFormat:=False).Activate

Ensuite je voulais sélectionner la première ligne retrouvé avec les filtres en dessous avec le code ActiveCell.Offset(1, 0).Select, sauf que comme il y a des filtres, il ne m'a pas sélectionné la première ligne trouvée avec les filtres mais une lignes filtrés. Du coup, je n'ai pas réussi à arriver à ma troisième étape qui était de faire un IF...

Sauriez vous comment réussir à faire ce que je souhaite ? Y a t il des solutions plus simple que celles que j'ai essayé ?

Auriez vous d'autres idées

Merci pour aide une nouvelle fois

Cordialement

3 réponses

Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
16 août 2022 à 16:16

Bonjour,

Peut être avec un exemple sur un fichier que vous mettez à disposition (y compris votre code y relatif), se serait plus compréhensible...!


0
ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
16 août 2022 à 17:26

Salut, 

Je verrai bien ça mais comme le dit Le Pingou, sans feuille à dispo c'est difficile à y voir clair :

Sub boucle_sur_CelulesFiltrees()
    
    Dim cel As Range, maPlage As Range

    ' On commence par tester si dans le filtre il y a au moins UNE ligne visible
    If FiltreOk(ActiveSheet) = True Then
        
        Set maPlage = Range(Cells(2, Range("Attribution").Column), Cells(Range("Attribution").End(xlDown).Row, Range("Attribution").Column))
        
        ' Si valeur trouvée alors on change sa valeur par 'Absent'
        For Each cel In maPlage.SpecialCells(xlCellTypeVisible)
            cel.Value = "Absent"
        Next cel
        
    ' Sinon fin de macro
    Else
        'Debug.Print "Il n'y a pas de valeur à modifier dans le tableau"
    End If

End Sub

' Fonction qui renvoi VRAI si au moins UNE ligne est retournée par le filtre
Function FiltreOk(Sh As Worksheet) As Boolean

    On Error Resume Next
    With Sh.AutoFilter.Range
        FiltreOk = .SpecialCells(xlCellTypeVisible).Rows.Address <> .Rows(1).Address
    End With
  
End Function

0

Bonjour ozone_, bonjour le Pingou,

Merci à tous les deux pour la prise en compte de ma demande. En effet, j'aurai dû y joindre un fichier dès le début car ce n'était vraiment pas très clair et je m'en excuse.

Pour autant, la réponse de ozone_ répond complétement à ma demande c'est parfait.

Je vous en remercie sincèrement

Cordialement

0