Problème pour exécuter une macro en boucle

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

R

rouillld

Guest
Bonsoir à toutes et à tous,

La macro suivante permet de sélectionner les lignes ayant un critère commun
(voir fichier joint "Exemple 2") si une ligne ayant la valeur "2" dans la colonne B est sélectionnée (ce sont les lignes surlignées en jaune) :

Sub Selection_Rang_2_rang_3()

Set s = Selection
Set c = Cells(ActiveCell.Row, 4)
Set rng = Range("D1😀" & Range("D65536").End(xlUp).Row)

s.Resize(Application.CountIf(rng, c)).Select

End Sub

Cette macro est associée au bouton "Sélection".

Comment faire pour que cette macro s'exécute en boucle tant que la valeur de la cellule N5 (établie par une liste déroulante) est égale à 2 ?

En gros, je voudrais ne pas avoir à appuyer sur le bouton "Sélection" à chaque fois avant de sélectionner une ligne.

Si quelqu'un pouvait m'aider...

Merci d'avance
 

Pièces jointes

Re : Problème pour exécuter une macro en boucle

Bonsoir,

Tu peux modifier ton code comme ceci :

Code:
Sub Selection_Rang_2_rang_3()
[B][COLOR="Red"]Do While Range("N5") = 1[/COLOR][/B] 'tu dis 2, moi j crois que c'est 1
    Set s = Selection
    Set c = Cells(ActiveCell.Row, 4)
    Set rng = Range("D1:D" & Range("D65536").End(xlUp).Row)
    Resize(Application.CountIf(rng, c)).Select
[B]    [COLOR="Red"]DoEvents
Loop[/COLOR][/B]
End Sub
 
Re : Problème pour exécuter une macro en boucle

Merci beaucoup pour ta réponse, c'est exactement ce que je voulais.

En exécutant la macro ça marche nickel, mais je me dis qu'il pourrait être possible de faire plus simple.

La macro associée à la liste déroulante est celle-ci :

Sub liste_deroulante_lignes()

Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False

If Range("N5") = "1" Then Call Tout_afficher_lignes
If Range("N5") = "2" Then Call Rang_1_rang_2
If Range("N5") = "3" Then Call Rang_1_rang_3
If Range("N5") = "4" Then Call Rang_1

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True

Range("A1").Select

End Sub

J'ai essayé de modifier de modifier cette macro pour lancer directement la macro Selection_Rang_2_rang_3 , et ce de la manière suivante :

(...)
If Range("N5") = "1" Then Call Tout_afficher_lignes
If Range("N5") = "1" Then Call Selection_Rang_2_rang_3
If Range("N5") = "2" Then Call Rang_1_rang_2
(...)

Mais ça fait planter Excel... Je ne vois pas vraiment comment faire, il faut peut-être mettre le Do While (...) DoEvents Loop à la place de la ligne en rouge ?
 

Pièces jointes

Re : Problème pour exécuter une macro en boucle

Merci, ça marche très bien encore une fois.

Cependant, quand j’essaie d’appliquer ces paramètres à mon fichier de travail réel, ça ne marche plus (absolument rien ne se passe).

N’y a-t-il bien que le code ci-dessous qui fait que la macro de sélection « fonctionne » à chaque « événement » et tant que la valeur de la cellule N5 est égale à 1 ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("N5") = 1 Then Call Selection_rang_2_rang_3
End Sub

Est-il possible qu’un paramètre d’une autre macro empêche cette macro de fonctionner ? Je ne connais bien pas la fonction Worksheet_SelectionChange…
 
Dernière modification par un modérateur:
- 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

Retour