Problème pour exécuter une macro en boucle

rouillld

XLDnaute Nouveau
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:D" & 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

  • Exemple 2.zip
    13.8 KB · Affichages: 51
  • Exemple 2.zip
    13.8 KB · Affichages: 48
  • Exemple 2.zip
    13.8 KB · Affichages: 49

Softmama

XLDnaute Accro
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
 

rouillld

XLDnaute Nouveau
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

  • Exemple 2.zip
    13.8 KB · Affichages: 32
  • Exemple 2.zip
    13.8 KB · Affichages: 34
  • Exemple 2.zip
    13.8 KB · Affichages: 39

rouillld

XLDnaute Nouveau
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 édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87