selection macro multiple

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

E

enki

Guest
bonsoir, je cherche a effectuer une macro pour masquer les lignes si la celulle I est vide sur une selection multiple,mais comment faire, j'ai réussi a le faire sur une zone unique.
de I1 à I570 mais je voudrait la faire sur I1 à I20, I50 I100, I120 à I320 et I 400 à I 570.

voici la macro que j'ai fait.

Sub effacer()
Cells.Select
Selection.EntireRow.Hidden = False
Range("A1").Select
Range("i1:i570").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
Range("A1").Select
End If
Next

End Sub

Merci de vos réponses
 
Re : selection macro multiple

Bonsoir enki
Essayez ceci :
Code:
Sub effacer()
Dim p, a, c
   Set p = Range("I1:I20, I50:I100, I120:I320, I400:I570")
   Cells.EntireRow.Hidden = False
   Application.ScreenUpdating = False
   For Each a In p.Areas
      For Each c In a
         If c.Value = "" Then c.EntireRow.Hidden = True
      Next c
   Next a
   Application.ScreenUpdating = True
End Sub
Bonne nuit !
ROGER2327
 
Re : selection macro multiple

Bonsoir enki, Roger2327

Pour le plaisir de croiser Roger2327 😉

Code:
Sub effacer()
Dim p As Range, a, c As Range
   Set p = Range("I1:I20, I50:I100, I120:I320, I400:I570")
   Cells.EntireRow.Hidden = False
   Application.ScreenUpdating = False
   For Each a In p.Areas
      For Each c In a
         c.EntireRow.Hidden = (c = "")
      Next c
   Next a
   Application.ScreenUpdating = True
End Sub
 
Re : selection macro multiple

Bonsoir enki, Roger2327, vbacrumble

Pour le plaisir de croiser Roger2327 et vbacrumble, et puisque l'on fait dans la dentelle.
Code:
Sub effacer()
Dim p As Range, a, c As Range
   Set p = Range("I1:I20, I50:I100, I120:I320, I400:I570")
   Cells.EntireRow.Hidden = False
   [COLOR=Blue][B]Application.ScreenUpdating = False[/B][/COLOR]
   For Each a In p.Areas
      For Each c In a
         c.EntireRow.Hidden = (c = "")
      Next c
   Next a
  [COLOR=Blue][B] ' RIEN[/B][/COLOR]
End Sub
Le "Application.ScreenUpdating = True" ne semble pas nécessaire ici.

Un petit 😉 à JCGL, au passage.

A plus
 
Re : selection macro multiple

Re-bonsoir à tous
À soenda :
D'accord, c'est plus court, mais je n'adhère pas, en vertu d'une de mes règles de vie.
Règle 2327.- L'endroit laisseras dans l'état où tu aurais aimé le trouver en entrant.
(Doctrine de Roger. Chap. IV, De la Conduite.)
Sur ce, bonne nuit !
ROGER2327
 
Dernière édition:
Re : selection macro multiple

Bonjour à tous,

Pour le plaisir de tous vous corriger 😀😛

Pourquoi ne pas faire plus simple
Code:
Sub effacer()
  Dim P As Range, C As Range
  Set P = Range("I1:I20, I50:I100, I120:I320, I400:I570")
  Cells.EntireRow.Hidden = False
  Application.ScreenUpdating = False
  For Each C In P
    C.EntireRow.Hidden = (C.Value = "")
  Next C
  Application.ScreenUpdating = True
End Sub

Ou alors
Code:
Sub Effacer2()
  Dim Plg As Range
  Set Plg = Range("I1:I20, I50:I100, I120:I320, I400:I570")
  Cells.EntireRow.Hidden = False
  Plg.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub

A moins qu'il y ait une subtilité que je n'ai pas compris 😕

A+
 
Dernière modification par un modérateur:
Re : selection macro multiple

Bonjour à tous

Pour le plaisir de croiser BrunoM45 (plaisir de le lire aussi )

Pourquoi pas ?

Code:
Sub Effacer3()
Cells.EntireRow.Hidden = False
Range("I1:I20, I50:I100, I120:I320, I400:I570").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub

ou pire 😀
Code:
[B]Sub Effacer4()
Cells.EntireRow.Hidden = False
[I1:I570].SpecialCells(4).EntireRow.Hidden = True
End Sub[/B]
 
Dernière édition:
Re : selection macro multiple

Bonjour, et bravo Messieurs !
Toutefois :
  1. Pour effacer(), pourquoi pas ceci ?
    Code:
    Sub effacer()
      Dim C As Range
      Cells.EntireRow.Hidden = False
      Application.ScreenUpdating = False
      For Each C In Range("I1:I20, I50:I100, I120:I320, I400:I570")
        C.EntireRow.Hidden = (C.Value = "")
      Next C
      Application.ScreenUpdating = True
    End Sub
  2. Avez-vous essayé Effacer2(), Effacer3(), Effacer4() sur une feuille vierge ? Non ? Vous devriez, sans vous commander...
  3. Sur une feuille qui a déjà des heures de vol, on admettra à la rigueur (voir 2.) Effacer2() ou Effacer3(), mais...
  4. ...pas Effacer4() : hors sujet, à mon avis.
Bon, on s'amuse bien, c'est l'essentiel.​
ROGER2327
 
Re : selection macro multiple

merci de vos réponse,

elle marche,

mais il y a t'il une solution pour que la macro prenne moins de temps pour réaliser la demande. (environs 30 seconde à 1 minute)

merci de vos réponse
 
Re : selection macro multiple

Bonsoir à tous
merci de vos réponse,

elle marche,

mais il y a t'il une solution pour que la macro prenne moins de temps pour réaliser la demande. (environs 30 seconde à 1 minute)

merci de vos réponse
Vu le nombre de propositions, de quelle procédure s'agit-il ? Pour (peut-être) réussir à l'accélérer, il faut que vous nous le disiez... À suivre, donc.
ROGER2327
 
- 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
4
Affichages
743
Réponses
7
Affichages
378
Réponses
3
Affichages
888
Réponses
14
Affichages
727
Réponses
4
Affichages
596
Retour