Besoin d'aide sur un Do...Loop

  • Initiateur de la discussion Initiateur de la discussion lolo62000
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lolo62000

Guest
Bonjour,

J'ai un problème sur cette fonction, suite à une demande de modification de mon boss. Travaillant à Montréal, mon code voulait supprimer chaque ligne d'une base de donnée ne faisant pas référence à Montréal. Mais maintenant, mon boss souhaite implanter le projet à travers les 4 bureaux au Canada. J'ai donc ajouter des check box pour choisir si on souhaite avoir les résultats de Montréal, Ottawa NG, Edmonton ou Toronto.
Selon la case cochée, le résultat s'affiche en B5.
J'aurais donc besoin de modifier mon code, de façon à dire :
si en colonne D (de la base de données), la valeur est différente de la cellule B, alors supprimer la ligne.
Voici mon ancien code :

Private Sub CommandButton3_Click()

Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 10 Step -1
If Cells(l, "u").Value <> "1" Then Cells(l, 1).EntireRow.Delete

Next l

Do
If Cells.Find(What:="Toronto") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Toronto").Activate
Selection.EntireRow.Delete
End If

Loop

Do
If Cells.Find(What:="Ottawa NG") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Ottawa NG").Activate
Selection.EntireRow.Delete
End If
Loop

Do
If Cells.Find(What:="Edmonton") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Edmonton").Activate
Selection.EntireRow.Delete
End If
Loop

Range("d:d,F:k,n:t").Delete

End Sub

Merci de m'aider, j'ai essayé toutes sortes de moyens, rien à faire.
 
Re : Besoin d'aide sur un Do...Loop

Bonsoir



Pour faire :
J'aurais donc besoin de modifier mon code, de façon à dire :
si en colonne D (de la base de données), la valeur est différente de la cellule B, alors supprimer la ligne.


Tu peux essayer cette macro
Code:
Sub effaceD()
Dim i&, s As Worksheet: [COLOR="Blue"]Set s = ThisWorkbook.Worksheets(1)[/COLOR]
Application.ScreenUpdating = False
With s
    For i = .UsedRange.Count To 1 Step -1
        If Not .Cells(i, "D") = .Cells(i, "B") Then
        .Rows(i).delete
        End If
    Next
End With
Application.ScreenUpdating = True
End Sub

PS: adapter le nom de la feuille (mot en bleu)
 
Re : Besoin d'aide sur un Do...Loop

Salut,
je viens d'essayer ton code, mais j'ai un message d'erreur qui dit :
"Erreur de compilation: Déclaration existante dans la portée en cours".
J'ai cherché ce que ca pouvait signifier, mais je ne trouve pas de réponses.
Peux-tu aussi voir si j'ai bien réécrit ton code, notamment la nom de la feuille, il se place bien comme ceci :
Dim i&, s As Worksheet: Set s = ThisWorkbook.Worksheets("Data") ?
Et concernant cette ligne, tu avais écris ceci :
If Not .Cells(i, "D") = .Cells(i, "B") Then
mais je pense que le code devrait être :
If Not .Cells(i, "D") = .Cells(i, "B5") Then
Sinon je ne comprends pas où est la ligne faisant référence à B5.
Merci beaucoup pour ton aide.
 
Re : Besoin d'aide sur un Do...Loop

Bonsoir, hello vbacrumble,
Pas très clair
Ta cellule B5 renvoie quoi suivant les checkbox(es) ?
Dans quelle colonne doit-on chercher le nom de la ville ? ça évitera de tester toute la feuille
A+
kjin
 
Re : Besoin d'aide sur un Do...Loop

ok, je vais essayer d'être plus clair.

J'ai 4 checkbox, chacune étant associée a une ville différente. Lorsqu'on sélectionne une ville, le nom de la ville apparaît dans la cellule B5. C'est cette cellule qui sert de variable en fait.
Maintenant, j'ai une base de données, de 20 colonnes environ, et de 1200 lignes environ.
Le nom des villes apparait dans la colonne D.
Je souhaiterais maintenant que selon la ville que je coche (Montréal, Toronto, Ottawa NG, Edmonton), la macro supprime toutes lignes où le nom de la ville inscrit dans la colonne D est différent de la ville inscrite en B5, soit différent de la ville cochée.
Mon ancien code fonctionnait, mais uniquement pour extraire les données de Montréal. Mon code supprimait alors ville par ville Toronto, Edmonton et Ottawa NG
Aujourd'hui, je veux le modifier, pour le rendre plus dynamique, et applicable dans les autres bureaux.
Voici l'ancien code, avec une partie nécessaire pour supprimer d'autres lignes dont je n'ai pas besoin.
En bleu, c'est la partie sur laquelle je bloque.


Private Sub CommandButton3_Click()

Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 10 Step -1
If Cells(l, "u").Value = "1A" Then Cells(l, 1).EntireRow.Delete
If Cells(l, "u").Value = "3" Then Cells(l, 1).EntireRow.Delete

Next l

Do
If Cells.Find(What:="Suggestion") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Suggestion").Activate
Selection.EntireRow.Delete
End If

Loop

Do
If Cells.Find(What:="Toronto") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Toronto").Activate
Selection.EntireRow.Delete
End If

Loop

Do
If Cells.Find(What:="Ottawa NG") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Ottawa NG").Activate
Selection.EntireRow.Delete
End If
Loop

Do
If Cells.Find(What:="Edmonton") Is Nothing Then
Exit Do
Else
Cells.Find(What:="Edmonton").Activate
Selection.EntireRow.Delete
End If
Loop



Range("d:k,n:t").Delete

End sub
 
Re : Besoin d'aide sur un Do...Loop

Bonsoir,
Code:
'....
For i = Range("D65000").End(xlUp).Row To 6 Step -1 'remplace le 6 par la première ligne à tester
   If Cells(i, 4) <> Range("B5") Then Rows(i).Delete
Next
'....
En outre, tu pourrais aussi utiliser un filtre
A+
kjin
 
Re : Besoin d'aide sur un Do...Loop

Rebonjour,

c'est lolo62000, avec un pseudo au boulot.
J'ai testé la proposition de code, mais la macro me supprime plein de lignes qu'elle n'est pas censée supprimer.
Comme il n'y a pas meilleure explication qu'un exemple, j'ai joint en pièce jointe une base de données simplifiée, pour vous permettre de mieux comprendre mon problème.
Pouvez-vous m'aider à comprendre pourquoi lorsque je sélectionne "Montréal", il ne me garde qu'une seule ligne, et lorsque je sélectionne "Edmonton, il ne garde qu'une ligne nommée "Montréal", et ainsi de suite car rien ne fonctionne.
Je m'arrache les cheveux. 😡 Je suis dû pour aller chez le coiffeur, mais bon, quand même....
 

Pièces jointes

Re : Besoin d'aide sur un Do...Loop

Bonsoir,
Parce que si tu as "Montreal " au lieu de "Montreal"... (j'ai laissé l'espace dans l'exemple joint)
J'ai remplacé les checkbox(es) par des boutons d'option
En outre, on pourrait aussi utiliser un module de classe pour les boutons
A+
kjin
 

Pièces jointes

Re : Besoin d'aide sur un Do...Loop

Merci pour ton aide Kjin. La macro fonctionne très bien.
Par contre, j'ai rajouté des lignes pour compléter l'exploitation de la base de données, et j'ai un problème avec la partie Renommer des cellules lorsqu'elle commencent par "Den" ou "Hea" pour la colonne E, et renommer lorsque commence par "Fin" ou "Non" pour la colonne H.
Vois-tu ce qui est pas correct là-dessus, car j'ai tout essayé, y'a rien à faire, ca ne renomme jamais les valeurs des cellules pour ces 2 colonnes.
Merci, je te renvoie l'exemple, avec l'ajout des lignes à probleme.
 

Pièces jointes

Re : Besoin d'aide sur un Do...Loop

Bonsoir,
C'est normal, dans la boucle, il faut mettre en forme tes données avant de supprimer la ligne
Je n'ai pas compris quelles colonnes supprimer à la fin de la procédure, car tu mets en forme la colonne pour la supprimer ensuite, bizarre non ?!
Donc je te laisse adapter
A+
kjin
 

Pièces jointes

Re : Besoin d'aide sur un Do...Loop

Salut, je viens d essayer ta macro, et c est parfait. Ca fonctionne impeccablement.
Je supprime certaines colonnes, pour n utiliser que quelques données envoyées ensuite dans un TCD.
Merci beaucoup pour ton aide, et vive ce forum!!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
411
Réponses
9
Affichages
508
Réponses
4
Affichages
756
Retour