Création MACRO pour nettoyage de base de données selon plusieurs critères
Bonjour,
Je souhaite créer une macro pour nettoyer une base de données que j’actualise toutes les semaines.
Je souhaite supprimer toutes les lignes contenant :
- « NB » dans la colonne BF,
- "BEANRU", “DEHAMU", "GBLGPU" et "NLRTMU" dans BH
- (autres sur le même principe)
J’ai fait plusieurs petites macros en me basant sur des exemples sur le forum mais aucune ne fonctionne :
Sub Filtres_NB_WK_Report()
Dim x As Range 'Déclare la variable x -> x = cellule
Set x = Range("BF1:BF" & Range("BF65536").End(xlUp).Row) 'x = BF1 à dernière cellule pleine de BF
For Each x In x 'Boucle sur toutes les cellules pleines de la colonne BFIf x ="NB" Then x.EntireRow.Delete 'Efface la ligneEnd If 'Fin
de la conditionNext x 'Fin de la boucleEnd SubSub Filtres_POD_WK_Report()
Dim x As Range 'Déclare la variable x -> x = celluleSet x = Range("BH1:BH" & Range("BH65536").End(xlUp).Row) 'x = BF1 à dernière cellule pleine de BHFor Each x In x If x ="BEANRU" or
If x ="DEHAMU" or
If x ="GBLGPU" or
If x = "NLRTMU"
Then x.EntireRow.Delete 'Efface la ligne
End If 'Fin de la condition
Next x 'Fin de la boucleEnd SubJe vous joins également un exemple du fichier Excel pour m’indiquer à quel moment je me trompe
D’avance merci pour votre aide et avis
Bonne journée,
Oups, désolé pour la mise en page bidon, j'ai fait un copier coller de mon message sous Excel et ça a donné qque chose de très laid,
Je reprends :
Bonjour,
Je souhaite créer une macro pour nettoyer une base de données que j’actualise toutes les semaines. Je souhaite supprimer toutes les lignes contenant :
- « NB » dans la colonne BF,
- "BEANRU", “DEHAMU", "GBLGPU" et "NLRTMU" dans BH
- (autres sur le même principe)
J’ai fait plusieurs petites macros en me basant sur des exemples sur le forum mais aucune ne fonctionne :
Sub Filtres_NB_WK_Report()
Dim x As Range 'Déclare la variable x -> x = cellule
Set x = Range("BF1:BF" & Range("BF65536").End(xlUp).Row) 'x = BF1 à dernière cellule pleine de BF
For Each x In x 'Boucle sur toutes les cellules pleines de la colonne BF
If x ="NB" Then x.EntireRow.Delete 'Efface la ligne
End If 'Fin de la condition
Next x 'Fin de la boucle
End SubSub Filtres_POD_WK_Report()
Dim x As Range 'Déclare la variable x -> x = cellule
Set x = Range("BH1:BH" & Range("BH65536").End(xlUp).Row) 'x = BH1 à dernière cellule pleine de BH
For Each x In x
If x ="BEANRU" or
If x ="DEHAMU" or
If x ="GBLGPU" or
If x = "NLRTMU"
Then x.EntireRow.Delete 'Efface la ligne
End If 'Fin de la condition
Next x 'Fin de la boucle
End SubJe vous joins également un exemple du fichier Excel pour m’indiquer à quel moment je me trompe
D’avance merci pour votre aide et avis
Bonne journée,
Salut, je t'invite à aller voir ces topics, c'est sensiblement les mêmes sujets :
https://forum.excel-pratique.com/excel/traitement-d-une-colonne-avec-une-liste-160385
Bibu
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
En complément de la réponse de BibuNesco, voici quelques indications :
Sub Filtres_Safran_WK_Report()
Application.ScreenUpdating = False
Dim n As Integer
For n = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 'j'ai juste changé cette ligne pour trouver vraiment la dernière ligne occupée
If Range("BF" & n) = "NB" Then Rows(n).Delete 'si tu as une seule indication dans ton SI, tu peux le mettre sur la même ligne que le IF et tu n'as ainsi pas besoin du else, ni du end if
Next n
End SubSinon, pour tester plusieurs valeurs, tu peux faire de différentes manières. La moins bonne mais la plus facile à comprendre dans un 1er temps serait de structurer tes IF ainsi :
Sub Filtres_Safran_WK_Report()
Application.ScreenUpdating = False
Dim n As Integer
For n = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("BF" & n) = "NB" or Range("BH" & n) = "BEANRU" or Range("BH" & n) = "DEHAMU" or Range("BH" & n) = "GBLGPU" or Range("BH" & n) = "NLRTMU" Then Rows(n).Delete
Next n
End SubJe rajouterais également qu'il vaudrait mieux mettre cette macro dans un module et pas forcément sur ta feuille, puisque que tu ne le lanceras à priori pas suite à un événement qui se produira sur la feuille.
Bonjour Bibu,
Merci beaucoup , mais je ne trouve pas ce que je cherche sur ces liens malheureusement,
Super,
Ca marche maintenant !
Un grand merci et bonne journée !