Macro excel masquer des lignes
CORNEMUSE
-
CORNEMUSE -
CORNEMUSE -
Bonjour,
Je voudrais masquer les lignes consécutives de la cellule sélectionnée, tant que la cellule au-dessous(de celle sélectionnée), est vide.
J'essaie comme suit, ça ne marche pas, merci de voler à mon secours
Sub masquerlignes()
l = ActiveCell.Row
c = ActiveCell.Column
While Cells(l + i, c) = ""
Cells(l + i, c).Select
Selection.EntireRow.Hidden = True
Wend
End Sub
Sub masquerlignes2()
l = ActiveCell.Row
c = ActiveCell.Column
For i = 1 To 50
If Cells(l + i, c) = "" Then
Cells(l + i, c).Select
Selection.EntireRow.Hidden = True
End If
Next i
End Sub.
Je voudrais masquer les lignes consécutives de la cellule sélectionnée, tant que la cellule au-dessous(de celle sélectionnée), est vide.
J'essaie comme suit, ça ne marche pas, merci de voler à mon secours
Sub masquerlignes()
l = ActiveCell.Row
c = ActiveCell.Column
While Cells(l + i, c) = ""
Cells(l + i, c).Select
Selection.EntireRow.Hidden = True
Wend
End Sub
Sub masquerlignes2()
l = ActiveCell.Row
c = ActiveCell.Column
For i = 1 To 50
If Cells(l + i, c) = "" Then
Cells(l + i, c).Select
Selection.EntireRow.Hidden = True
End If
Next i
End Sub.
A voir également:
- Macro excel masquer des lignes
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Partager des photos en ligne - Guide
- Si ou excel - Guide
11 réponses
bonjour
incrémente i avant wend
mais ca peut se faire sans boucle...
lig = ActiveCell.Row
col = ActiveCell.Column
lig_fin = Columns(col).Find("*", Cells(lig, col), xlValues).Row
If lig_fin > lig + 1 Then
Rows(lig + 1 & ":" & lig_fin - 1).Delete
End If
incrémente i avant wend
i=i+1 wend
mais ca peut se faire sans boucle...
lig = ActiveCell.Row
col = ActiveCell.Column
lig_fin = Columns(col).Find("*", Cells(lig, col), xlValues).Row
If lig_fin > lig + 1 Then
Rows(lig + 1 & ":" & lig_fin - 1).Delete
End If
Bonjour,
Oui excuses moi
Rows(lig + 1 & ":" & lig_fin - 1).hidden=true
Pour Find, il faut que tu cherches dans l'aide de VBA (pour aller dans VBA:Alt+F11) et non d'XL. Pour piger, étudies bien l'exemple fourni par MS
Lig_fin est le numéro de la première cellule non vide ("*") sous la cellule sélectionnée (...cells(lig,col)...)
xlvalues demande à prendre la valeur dans la cellule( au cas où les cellules comporterait une formule avec comme résultat: "")
on cache depuis la ligne du dessous: lig+1
jusqu'à la ligne au dessus de lig_fin: lig_fin-1
Oui excuses moi
Rows(lig + 1 & ":" & lig_fin - 1).hidden=true
Pour Find, il faut que tu cherches dans l'aide de VBA (pour aller dans VBA:Alt+F11) et non d'XL. Pour piger, étudies bien l'exemple fourni par MS
Lig_fin est le numéro de la première cellule non vide ("*") sous la cellule sélectionnée (...cells(lig,col)...)
xlvalues demande à prendre la valeur dans la cellule( au cas où les cellules comporterait une formule avec comme résultat: "")
on cache depuis la ligne du dessous: lig+1
jusqu'à la ligne au dessus de lig_fin: lig_fin-1
Bonjour
Macro7 ne fonctionne: c'est vrai, big surprise d'autant plus que je suis en référence L1C1 et que
fonctionne... donc, mystère et boule de gomme
l'exemple de la fonction Find de l'aide Microsoft (MS) est celui-ci
question à 1 euro: pourquoi cette variable firstaddress ?
piger cela te sera utile dans tes macros comme ca l'a été, non sans mal, pour moi :-)
Macro7 ne fonctionne: c'est vrai, big surprise d'autant plus que je suis en référence L1C1 et que
Columns("E" & ":" & "H").Hidden = True
fonctionne... donc, mystère et boule de gomme
l'exemple de la fonction Find de l'aide Microsoft (MS) est celui-ci
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
question à 1 euro: pourquoi cette variable firstaddress ?
piger cela te sera utile dans tes macros comme ca l'a été, non sans mal, pour moi :-)
Bonsoir Michel,
J'aimerais comprendre pourquoi la macro suivante, que tu m'as indiquée, ne fonctionne pas.
Sub Macro1()
With Worksheets(1).Range("a1:a50")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End sub
Le débogueur me répond erreur d'exécution 91... Variable objet ou variable de bloc with non définie.
Merci de ton aide.
J'aimerais comprendre pourquoi la macro suivante, que tu m'as indiquée, ne fonctionne pas.
Sub Macro1()
With Worksheets(1).Range("a1:a50")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End sub
Le débogueur me répond erreur d'exécution 91... Variable objet ou variable de bloc with non définie.
Merci de ton aide.
Bonjour,
Curieux, c'est pourtant un copier-coller de l'aide microsoft et je l'avais déjà étudié pour apprendre mais peut-^tre pas jusqu'au bout !!!...
ce qui se passe: lorsque tous les 2 ont été remplacés par des 5, c.address ="rien"(nothing) et donc n'existe pas d'où erreur
Enfin, tel que je crois comprendre
voici ce que j'ai fait pour éviter le plantage
Mais si quelqu'un sur le forum connait le pourquoi du comment, je suis preneur!
Bonne soirée
Curieux, c'est pourtant un copier-coller de l'aide microsoft et je l'avais déjà étudié pour apprendre mais peut-^tre pas jusqu'au bout !!!...
ce qui se passe: lorsque tous les 2 ont été remplacés par des 5, c.address ="rien"(nothing) et donc n'existe pas d'où erreur
Enfin, tel que je crois comprendre
voici ce que j'ai fait pour éviter le plantage
Sub cherche()
With Worksheets(1).Range("a1:a50")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
If c Is Nothing Then: Exit Do
Loop While c.Address <> firstAddress
End If
End With
End Sub
Mais si quelqu'un sur le forum connait le pourquoi du comment, je suis preneur!
Bonne soirée
Salut michel et cornemuse,
Je suis presque d'accord avec toi michel, plus précisément je dirais que si c=nothing alors c.address ne veut plus rien dire.
D'ailleurs à quoi sert ce test c.Address <> firstAddress ?
A rien j'ai l'impression, puisque s'il ne trouve plus rien on aura .FindNext(c)=nothing et c'est justement la première condition de sortie de boucle.
J'ai testé :
comme simplification et ça a l'air de bien tourner...
eric
Je suis presque d'accord avec toi michel, plus précisément je dirais que si c=nothing alors c.address ne veut plus rien dire.
D'ailleurs à quoi sert ce test c.Address <> firstAddress ?
A rien j'ai l'impression, puisque s'il ne trouve plus rien on aura .FindNext(c)=nothing et c'est justement la première condition de sortie de boucle.
J'ai testé :
Sub Macro1()
With Worksheets(1).Range("a1:a50")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With
End Sub
comme simplification et ça a l'air de bien tourner...
eric
Bonsoir tout le monde,
En un peu plus court si j'ai bien compris la demande :
eric
En un peu plus court si j'ai bien compris la demande :
If ActiveCell.Offset(1, 0) = "" Then
Range(ActiveCell.Offset(1, 0), ActiveCell.End(xlDown).Offset(-1, 0)).EntireRow.Hidden = True
End If
eric
Bonsoir Eric,
J'ai essayé la macro:
If ActiveCell.Offset(1, 0) = "" Then
Range(ActiveCell.Offset(1, 0), ActiveCell.End(xlDown).Offset(-1, 0)).EntireRow.Hidden = True
End If
Elle ne correspond pas tout à fait à ce queje souhaite: elle affiche toutes les lignes de la feuille au-dessous de la cellule active, si ces lignes ont leur cellule de la même colonne que la cellule active, vide.
Or la feuille contient plusieurs plages correspondant à ces critères, et je souhaite que la 1ère plage seulement soit concernée.
Merci de ton aide.
J'ai essayé la macro:
If ActiveCell.Offset(1, 0) = "" Then
Range(ActiveCell.Offset(1, 0), ActiveCell.End(xlDown).Offset(-1, 0)).EntireRow.Hidden = True
End If
Elle ne correspond pas tout à fait à ce queje souhaite: elle affiche toutes les lignes de la feuille au-dessous de la cellule active, si ces lignes ont leur cellule de la même colonne que la cellule active, vide.
Or la feuille contient plusieurs plages correspondant à ces critères, et je souhaite que la 1ère plage seulement soit concernée.
Merci de ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Eriiic,
As tu une explication pour le coup de la macro7 ?
j'y perd mon peu de patois VBA...
donc, si tu connaissais le pourquoi du comment ?
As tu une explication pour le coup de la macro7 ?
j'y perd mon peu de patois VBA...
donc, si tu connaissais le pourquoi du comment ?
Salut michel,
Pour excel "1:4" ne peut représenter qu'une plage de lignes (malgré que l'ambiguïté pourrait être levée par l'utilisation de columns)
On peut supposer que pour faciliter la saisie (4 & ":" & 14) soit converti en ("4:14") (conversion des nombres en strings), ce qui donne une syntaxe correcte pour rows mais pas pour columns.
J'ai beau réfléchir, je ne vois pas comment désigner directement une plage de colonnes par leur numéro...
Laissons mûrir, ça viendra peut-être :-)
Bonne journée
eric
Pour excel "1:4" ne peut représenter qu'une plage de lignes (malgré que l'ambiguïté pourrait être levée par l'utilisation de columns)
On peut supposer que pour faciliter la saisie (4 & ":" & 14) soit converti en ("4:14") (conversion des nombres en strings), ce qui donne une syntaxe correcte pour rows mais pas pour columns.
J'ai beau réfléchir, je ne vois pas comment désigner directement une plage de colonnes par leur numéro...
Laissons mûrir, ça viendra peut-être :-)
Bonne journée
eric
Salut à vous,
Je n'ai pas eu le temps de travailler les dernières réponses(mes activtés de retraité, et la préparation des fêtes familiales, ça occupe), mais j'ai une autre question.
Je bricole depuis une quinzaine d'années sur les macros d'Excel. Autodidacte, j'ai quand même rencontré des gens qui m'ont mis ou remis sur des rails (sinon je planterais des choux), mais je ne suis pas ouvert au(x) langage(s) qu'utilisent les habitués de l'informatique. Ce n'est pas pour raconter ma vie, mais pour situer...
Les macros que je crée et utilise, sont écrites sur des modules Virtual Basic. Et j'ai découvert qu'il existe des macos écrites sur des feuilles excel, dans un langage qui m'est inconnu. Exemple:
TRIER LES DONNEES
=SELECTIONNER("L11C1:L199C20")
=TRIER(1;"L11C1";1)
=SELECTIONNER("L5C1")
=RETOUR()
Si quelqu'un peut m'aider, me traduire par exemple ce qui précède, me dire où m'adreser...
Merci
Je n'ai pas eu le temps de travailler les dernières réponses(mes activtés de retraité, et la préparation des fêtes familiales, ça occupe), mais j'ai une autre question.
Je bricole depuis une quinzaine d'années sur les macros d'Excel. Autodidacte, j'ai quand même rencontré des gens qui m'ont mis ou remis sur des rails (sinon je planterais des choux), mais je ne suis pas ouvert au(x) langage(s) qu'utilisent les habitués de l'informatique. Ce n'est pas pour raconter ma vie, mais pour situer...
Les macros que je crée et utilise, sont écrites sur des modules Virtual Basic. Et j'ai découvert qu'il existe des macos écrites sur des feuilles excel, dans un langage qui m'est inconnu. Exemple:
TRIER LES DONNEES
=SELECTIONNER("L11C1:L199C20")
=TRIER(1;"L11C1";1)
=SELECTIONNER("L5C1")
=RETOUR()
Si quelqu'un peut m'aider, me traduire par exemple ce qui précède, me dire où m'adreser...
Merci
Salut,
Sub Macro7()
Columns(4 & ":" & 14).Hidden = True
End Sub
Essai
Sub Macro7()
Columns(4 & ":" & 14).Hidden = True
End Sub
Essai
Range(Columns(4),Columns(14)).Hidden = True
Bonsoir,
Ce sont les premières macro (excel 4). Visual basic n'existait pas et les macros étaient saisies dans des feuilles.
https://www.google.fr/search?hl=fr&client=firefox-a&rls=org.mozilla:fr:official&hs=SOu&ei=W5IyS8qcA8Pb4gasluiqCA&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CAYQBSgA&q=macro+excel+4&spell=1&gws_rd=ssl
eric
Ce sont les premières macro (excel 4). Visual basic n'existait pas et les macros étaient saisies dans des feuilles.
https://www.google.fr/search?hl=fr&client=firefox-a&rls=org.mozilla:fr:official&hs=SOu&ei=W5IyS8qcA8Pb4gasluiqCA&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CAYQBSgA&q=macro+excel+4&spell=1&gws_rd=ssl
eric
Re,
Il y avait et il y a encore 2 styles de références dans excel : A1 (que tu connais) et L1C1.
Dans le style L1C1 tu désignes ligne et colonne de ta référence.
Ex :
=L5C1 : référence absolue ligne-colonne équivalente à =$A$5 ( (ligne 5 colonne 1)
=L(-2)C(-1) : référence relative ligne-colonne, 2 lignes au dessus et 1 colonne à gauche. Si tu es en B6 équivalent à =A4
Tu peux tester en allant dans les options, onglet 'général', cocher 'Style de référence L1C1'
eric
Il y avait et il y a encore 2 styles de références dans excel : A1 (que tu connais) et L1C1.
Dans le style L1C1 tu désignes ligne et colonne de ta référence.
Ex :
=L5C1 : référence absolue ligne-colonne équivalente à =$A$5 ( (ligne 5 colonne 1)
=L(-2)C(-1) : référence relative ligne-colonne, 2 lignes au dessus et 1 colonne à gauche. Si tu es en B6 équivalent à =A4
Tu peux tester en allant dans les options, onglet 'général', cocher 'Style de référence L1C1'
eric
Re,
je répond ici au post 16 car ça devient le bazar ce fil ;-)
J'ai essayé la macro:
If ActiveCell.Offset(1, 0) = "" Then
Range(ActiveCell.Offset(1, 0), ActiveCell.End(xlDown).Offset(-1, 0)).EntireRow.Hidden = True
End If
Elle ne correspond pas tout à fait à ce queje souhaite: elle affiche (je suppose qu'il faut lire 'masque') toutes les lignes de la feuille au-dessous de la cellule active, si ces lignes ont leur cellule de la même colonne que la cellule active, vide.
C'est quoi la différence avec ta demande du post 1 ? qui est :
Je voudrais masquer les lignes consécutives de la cellule sélectionnée, tant que la cellule au-dessous(de celle sélectionnée), est vide.
Or la feuille contient plusieurs plages correspondant à ces critères, et je souhaite que la 1ère plage seulement soit concernée.
Ben ça s'arrete à la 1ère cellule non vide..
Qcq chose m'échappe mais quoi ? :-s
je répond ici au post 16 car ça devient le bazar ce fil ;-)
J'ai essayé la macro:
If ActiveCell.Offset(1, 0) = "" Then
Range(ActiveCell.Offset(1, 0), ActiveCell.End(xlDown).Offset(-1, 0)).EntireRow.Hidden = True
End If
Elle ne correspond pas tout à fait à ce queje souhaite: elle affiche (je suppose qu'il faut lire 'masque') toutes les lignes de la feuille au-dessous de la cellule active, si ces lignes ont leur cellule de la même colonne que la cellule active, vide.
C'est quoi la différence avec ta demande du post 1 ? qui est :
Je voudrais masquer les lignes consécutives de la cellule sélectionnée, tant que la cellule au-dessous(de celle sélectionnée), est vide.
Or la feuille contient plusieurs plages correspondant à ces critères, et je souhaite que la 1ère plage seulement soit concernée.
Ben ça s'arrete à la 1ère cellule non vide..
Qcq chose m'échappe mais quoi ? :-s
Bonjour, je précise, et te présente mes excuses pour l'erreur suivante,
J'ai effectivement remplacé True par False, pensant que ça serait sans conséquences...
En fait, avec True, ça marche, mais pas avec False.
Mon exemple, avec False:
cellule B1 occupée
B2 à B10, vides
B11 et B12 occupées
B13 à B17, vides
B18, B19, B20, occupées
B21 à B28, vides
B29 et B30, occupées
cellule active: B1. Je lance la macro, toutes les lignes sont affichées, alors que je ne souhaitais voir que les lignes 2 à 10.
De même, je voudrais lancer à partir de B12 ou B20 et découvrir les lignes 13 à 17 ou de 21 à 28.
Encore mes excuses et merci.
J'ai effectivement remplacé True par False, pensant que ça serait sans conséquences...
En fait, avec True, ça marche, mais pas avec False.
Mon exemple, avec False:
cellule B1 occupée
B2 à B10, vides
B11 et B12 occupées
B13 à B17, vides
B18, B19, B20, occupées
B21 à B28, vides
B29 et B30, occupées
cellule active: B1. Je lance la macro, toutes les lignes sont affichées, alors que je ne souhaitais voir que les lignes 2 à 10.
De même, je voudrais lancer à partir de B12 ou B20 et découvrir les lignes 13 à 17 ou de 21 à 28.
Encore mes excuses et merci.
J'essaie la 2e solution, ça ne masque pas, ça efface les lignes. Je suppose qu'il me faut remplacer Delete par un autre mot, mais lequel...?
Autre chose, je ne comprends pas les lignes 3 et 5. J'ai cherché Find dans fonctions, sans succès. Merci de m'éclairer si c'est possible.