Boucle ne progresse pas

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • 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 !

Sebast

XLDnaute Impliqué
Bonjour au forum,

ma question peut paraître triviale mais je n'arrive pas à "automatiser" une recherche à partir d'une liste. J'arrive à prendre en compte le premier critère d'une liste, mais pas les suivants.

Dans le petit fichier joint, c'est certainement beaucoup plus parlant !

Merci d'avance à toutes et tous qui auront voulu m'éclairer

Sebast
 

Pièces jointes

Re : Boucle ne progresse pas

Bonjour Sebast

Il faut que tu boucle également sur les lignes de la feuille "Paramètres"
Tu peux utiliser ce style de code
Code:
Sub supprimer_enregistrements_quand_pays()  ' Définir le variables pour la feuille Paramètres
  ' DligP = Dernière ligne
  ' LigP = Ligne actuelle
  ' ShtP = Variable objet pour la feuille Paramètres
  Dim DLigP As Long, LigP As Long, ShtP As Worksheet
  ' Définir le variables pour la feuille Base
  ' DligB = Dernière ligne
  ' LigB = Ligne actuelle
  Dim DLigB As Long, LigB As Long
  Dim pays_à_supprimer As String
  
  Set ShtP = Sheets("Paramètres")
  DLigP = ShtP.Range("B" & Rows.Count).End(xlUp).Row
  ' Pour chaque pays à supprimer
  For LigP = 3 To DLigP
    pays_à_supprimer = ShtP.Range("B" & LigP)
    ' Avec la feuilel Base
    With Sheets("Base")
      .Activate
      ' Memoriser la dernière ligne
      DLigB = .Range("B" & Rows.Count).End(xlUp).Row
      ' Pour chaque ligne en partant de la fin
      For LigB = DLigB To 2 Step -1
        ' SI le pays correspond, supprimer la ligne
        If .Range("B" & LigB) = pays_à_supprimer Then Rows(LigB).Delete
      Next LigB
    End With
  Next LigP
End Sub

a+
 
Dernière modification par un modérateur:
Re : Boucle ne progresse pas

Bonjour

Essais ceci :
VB:
Sub supprimer_enregistrements_quand_pays()
Set f = Sheets("param")
nbpays = f.Range("b3").End(xlDown).Row
Sheets("Base").Activate
    For i = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
        If Application.WorksheetFunction.CountIf(f.Range("B3:B" & nbpays), Cells(i, 2)) >= 1 Then
            Rows(i).Delete
        End If
    Next i
End Sub

Bonne journée

Edit : Bonjour Bruno
 
Re : Boucle ne progresse pas

Bonjour BrunoM45,

merci beaucoup pour ta réponse. Je n'ai pas répondu tout de suite car je voulais être sûr d'avoir compris avant de répondre, au cas où j'aurais besoin de précisions.
ça marche parfaitement, comme toujours avec toi c'est très lisible et didactique : encore merci !
Il me reste à "digérer" toutes ces infos, d'où aussi ma lenteur à répondre ! Je comprends globalement le schéma mais c'est quand même pas évident à assimiler ...

ce qui m'échappe, c'est que dans un cas on fixe Set ShtP = Sheets("Paramètres") puis on écrit la suite
et dans un autre cas on fixe With Sheets("Base") ...
pourquoi ne pas écrire with sheets("Paramètres") ?

de plus (tu l'as remarqué, je débute ...), quand on a fixé with Sheets("Base") , on accède aux instructions avec un point au début ?
si je n'avais pas mis with Sheets("Base"), alors aurais-je dû écrire
If sheets("Base").Range("B" & LigB) = pays_à_supprimer Then Rows(LigB).Delete ?

encore merci pour tes lumières

Sebast
 
Re : Boucle ne progresse pas

Bonjour PrinceCorwin,

désolé pour ma réponse tardive, j'ai voulu mettre au point avant de revenir au forum (en fait, j'ai dû corriger Set f = Sheets("param") par ... ("paramètres")) - une bricole ...

Un grand merci pour ton aide, ça fonctionne parfaitement. Mais comme je suis débutant, j'ai beaucoup de mal à assimiler les notions du type set ...

Si je voulais être vraiment basique et squizzer le set ... (je sais, c'est certainement une hérésie mais je veux comprendre ce que je fais), quel serait le code ? Faudrait-il simplement remplacement l'expression par l'autre côté du signe = ?

Encore merci pour ton aide

Sebast
 
Re : Boucle ne progresse pas

Re,

Bonjour BrunoM45,
merci beaucoup pour ta réponse. Je n'ai pas répondu tout de suite car je voulais être sûr d'avoir compris avant de répondre, au cas où j'aurais besoin de précisions.
ça marche parfaitement, comme toujours avec toi
Merci, merci 😱

c'est très lisible et didactique : encore merci !
J'essaye toujours pour que le code puisse être facilement lisible et adaptable 😉

Il me reste à "digérer" toutes ces infos, d'où aussi ma lenteur à répondre ! Je comprends globalement le schéma mais c'est quand même pas évident à assimiler ...
Ca fait toujours ça quand on commence dans un langage 😛

Ce qui m'échappe, c'est que dans un cas on fixe Set ShtP = Sheets("Paramètres") puis on écrit la suite
et dans un autre cas on fixe With Sheets("Base") ...
pourquoi ne pas écrire with sheets("Paramètres") ?
On ne peut pas imbriquer des With ... End With quand on utilise le même objet, ici, 2 feuilles distinctes
Sinon VBA ne sait pas a quel objet apartient la propriété ou la méthode définit grace au "." point

[quote}de plus (tu l'as remarqué, je débute ...), quand on a fixé with Sheets("Base") , on accède aux instructions avec un point au début ?[/quote]
Tout à fait, c'est de la programmation objet

si je n'avais pas mis with Sheets("Base"), alors aurais-je dû écrire
If sheets("Base").Range("B" & LigB) = pays_à_supprimer Then Rows(LigB).Delete ?
Tout à fait, sauf que pour ton Rows(LigB).Delete, VBA ne sait à quel objet appliquer l'action
Par défaut c'est sur l'objet actif, donc ATTENTION

Il faut donc écrire
Code:
If sheets("Base").Range("B" & LigB) = pays_à_supprimer Then sheets("Base").Rows(LigB).Delete ?
Tu vois dans ce cas pourquoi utiliser une variable objet ou le "." point

A+
 
Re : Boucle ne progresse pas

OK , je comprends mieux, même si c'est pas évident !

Je préfère poser ces questions car j'adapte ces codes à mes besoins spécifiques et je veux que ce soit transposable à ce que je serai amené à traiter à l'avenir.

Encore merci pour tes explications et ta disponibilité
 
Re : Boucle ne progresse pas

Bonjour Sebast,
Bonjour Bruno,
Le fil...

Si je voulais être vraiment basique et squizzer le set ... (je sais, c'est certainement une hérésie mais je veux comprendre ce que je fais), quel serait le code ? Faudrait-il simplement remplacement l'expression par l'autre côté du signe = ?

Le SET f n'est qu'un raccourci pour ne pas a avoir a noter a chaque fois sheets("paramêtres").range(...)
je note f.range(...). Ca va plus vite à écrire, mais au niveau de l'interpréteur de commande, c'est la même chose.

Bonne continuation 😉
 
- 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

Discussions similaires

Retour