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
Bonjour,
Une proposition à étudier.
Les données ont été mises sous forme de tableau.
Cdlt.
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 SubC'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).ValueJ'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 SubMa 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.