Macro Remplacer Cellule avec Condition

Bonjour ,

N'étant pas très doué en code je viens solliciter votre aide.

J'ai créé un TCD qui est alimenté par une base.

L'objectif est de modifier dans ma base la plage de cellule pour toutes les lignes ayant un code que j'aurai choisi.

J'ai tenté de faire la macro manuellement en copiant le code et en le collant dans le filtre mais lorsque je modifie les cellules ça prend uniquement les lignes de la ville avec laquelle j'ai fais ma macro manuellement.

Concrètement ici j'ai refais un fichier, (dans le fichier d'origine il y a beaucoup plus de villes, et les villes n'ont pas le même nombre de lignes qui leur est attribué) le but est de remplacer les NON par des OUI dans la Feuil1 uniquement pour les lignes qui possède mon code de ville choisi dans la Feuil2.

Voici le code que j'ai fias manuellement

Sub Ajouter()

Sheets("Feuil1").Select

ActiveWindow.ScrollColumn = 9

ActiveWindow.ScrollColumn = 6

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 1

ActiveSheet.Range("$A$3:$AD$5981").AutoFilter Field:=2, Criteria1:=Sheets("Feuil2").Range("G2")

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 4

ActiveWindow.ScrollColumn = 5

ActiveWindow.ScrollColumn = 6

ActiveWindow.ScrollColumn = 7

ActiveWindow.ScrollColumn = 8

Sheets("Feuil2").Select

Range("K1").Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Feuil1").Select

Range("C5:C11").Select

ActiveSheet.Paste

Range("C12").Select

Sheets("Feuil1").Select

End Sub

Je me demandais si il était donc possible de faire au niveau de la partie Range("C5:C11").Select de faire une sorte de condition, si la cellule de la colonne B est égal à G2 de ma feuille 2 alors remplir OUI pour la ligne associé dans la colonne C.

Je sais pas si ma demande est très clair ...

Merci d'avance

8test-macro.xlsm (22.31 Ko)

Bonjour,

Une proposition à étudier.

Les données ont été mises sous forme de tableau.

Cdlt.

31test-macro-1.xlsm (29.25 Ko)
Public Sub Ajouter()
Dim lo As ListObject, rng As Range, Cell As Range
    Set lo = Worksheets("Données").ListObjects(1)
    If lo.ShowAutoFilter Then lo.AutoFilter.ShowAllData
    lo.Range.AutoFilter field:=1, Criteria1:=Cells(2, 6).Value
    lo.Range.AutoFilter field:=2, Criteria1:=Cells(2, 7).Value
    With lo.AutoFilter.Range
        On Error Resume Next
        Set rng = .Offset(1, 2).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    If Not rng Is Nothing Then
        For Each Cell In rng
            If UCase(Cell.Value) = "NON" Then Cell.Value = "OUI"
        Next Cell
    End If
    lo.Range.AutoFilter field:=1
    lo.Range.AutoFilter field:=2
End Sub

C'est exactement ce que je voulais, toujours aussi fort Jean Eric !

Cependant je n'arrive pas à le faire sur mon fichier d'origine ...

J'ai transformé ma Base en tableau et j'ai renommé la feuille comme sur le fichier.

Ici

Set lo = Worksheets("Données").ListObjects(1)

C'est quoi ListeObjects(1) ? C'est le tableau ? Ça va être le même terme à utiliser pour mon autre fichier ?

Pour cette partie

lo.Range.AutoFilter field:=1, Criteria1:=Cells(2, 6).Value
    lo.Range.AutoFilter field:=2, Criteria1:=Cells(2, 7).Value

J'ai associé le numéro de colonne du tableau (1 ici et 14 pour mon autre fichier) au critère de la cellule de mon autre fichier (1,18) (dans la même feuille que ma macro)

De même ici pour le code (2 et pour mon fichier 5 ) à (1,19).

Après pour

Set rng = .Offset(1, 2)

J'ai remplacé par

Set rng = .Offset(1, 5)

Ensuite j'ai modifié la fin de mon code ce qui me donne ça au final

Public Sub Ajouter()
Dim lo As ListObject, rng As Range, Cell As Range
    Set lo = Worksheets("Données").ListObjects(1)
    If lo.ShowAutoFilter Then lo.AutoFilter.ShowAllData
    lo.Range.AutoFilter field:=14, Criteria1:=Cells(1, 18).Value
    lo.Range.AutoFilter field:=5, Criteria1:=Cells(1, 19).Value
    With lo.AutoFilter.Range
        On Error Resume Next
        Set rng = .Offset(1, 5).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    If Not rng Is Nothing Then
        For Each Cell In rng
            If UCase(Cell.Value) = "NON" Then Cell.Value = "OUI"
        Next Cell
    End If
    lo.Range.AutoFilter field:=14
    lo.Range.AutoFilter field:=5
End Sub

Ma question est : est ce que j'ai bien modifié les bonnes parties ? (désolé je suis vraiment débutant)

Merci d'avance.

Re,

1 - Si tu n'as qu'un tableau dans la feuille de calcul, tu n'as pas besoin de nommer le tableau (gestionnaire de noms). On utilise son index (1). Si tu as plusieurs tableaux dans la feuille, il faut les nommer :

set lo = Worksheets("Données").Listobjects("Tableau1")

2 - Assure toi bien que

Set rng = .Offset(1, 5).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)

renvoie bien la colonne désirée.

3 - Pour le reste, cela paraît correct...

Cdlt.

Rechercher des sujets similaires à "macro remplacer condition"