Compteur de ligne conditionnel à aff/masquer

Fermé
la crotte de charles - 4 août 2010 à 17:05
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 5 août 2010 à 16:20
Bonjour,

Voila j'ai un chiffrier excel avec une macro effectuant un filtre élaborer maintenant je cherche à standardiser la hauteur de mes lignes
allons-y avec un exemple pour simplifier l'explication donc,
disons que de la ligne 2 a 8 je veux toujours que ce ''range'' soit de hauteur 200 mais parfois après l'exécution de ma macro filtre il se peut que certaines de ces lignes soit masquer donc si la ligne 4 et 5 sont masquer la hauteur de 200 doit se distribuer sur les cellules restantes (dans l'exemple cellules 2,3,6,7,8) etc. Mes pistes de solution sont élaborer une macro qui compte les lignes NON MASQUER dans le range (2:8) et qui stock la valeur dans une variable et de là diviser ma hauteur voulu par cette variable exemple il compte 3 ligne non masquer dans chaque ligne non masquer rowheight = 200/3 et ainsi de suite....
A voir également:

11 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 août 2010 à 17:27
Bonjour,
Sais pas si j'ai bien compris...
Function NbVisible() As Long
Dim Lig As Long
    For Lig = 1 To Range("A65335").End(xlUp).Row
        If Not Rows(Lig).Hidden Then NbVisible = NbVisible + 1
    Next Lig
End Function

Compte le nombre de ligne(s) visible(s).
A+
0
la crotte de charles
4 août 2010 à 19:15
oui, ca semble etre bon mais il manquerait une ligne de code pour faire en sorte que les lignes se dimensionne en hauteur par rapport a nbvisible

de sorte que les lignes comprisent dans mon range prennent chancune une hauteur prédéterminé à l'aide de nbvisible

ex:

Function NbVisible() As Long
Dim Lig As Long
For Lig = 1 To Range("tableau").Row
If Not Rows(Lig).Hidden Then NbVisible = NbVisible + 1

Next Lig
End Function

voici j'ai modifier ton code pour range("tableau") et maintenant je veux que toute les lignes visibles du range tableau prenne la dimension 200/nbvisible

je sais pas si je suis assez clair

merci
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 4/08/2010 à 19:32
avec..
Dim A, B  
    A = Range("tableau").Row  
    B = Range("tableau").Rows.Count  
    Rows(A & ":" & A + B - 1).RowHeight = 200 / NbVisible  

A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
la crotte de charles
4 août 2010 à 19:49
ca ne marche malheureusement pas je crois que le problème se situe au niveau de la ligne : Rows(A & ":" & A + B - 1).RowHeight = 200 / NbVisible
car si je masque la ligne 1 (range tableau = ligne 1 à 4 ) il bug et si je masque une des autres ligne 2,3 ou 4 il fait reapparaitre les lignes et les dimensionnent ce que je veux c'est :
si il n'y a pas de ligne masquer, chacune des lignes 1,2,3 et 4 seront de 50...
si il y a une ligne de masquer, les trois autres seront de 66.67
si il y a 2 ligne de masquer, les 2 restant seront de 100 chacun
si il y a 3 lignes de masquer , la ligne restant sera de 200


je crois que nous approchont de la solution

merci de tes réponses si rapide...tu est plutot doué pas comme moi :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 4/08/2010 à 19:56
1°) Juste, ça réaffiche les lignes
2°) mais ta ligne..
    For Lig = 1 To Range("tableau").Row 

n'est pas bonne, faut faire...
     For Lig = Range("tableau").Row to  Range("tableau").Row.count +Range("tableau").Row -1

3°) Je prépare la suite


L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 4/08/2010 à 20:07
Voila une fonction qui... fonctionne :-)
Function NbVisible() As Long 
Dim Lig As Long, LigDeb As Long, LigFin As Long, HT As Single 
    LigDeb = Range("tableau").Row 
    LigFin = Range("tableau").Row + Range("tableau").Rows.Count - 1 
    For Lig = LigDeb To LigFin 
        If Not Rows(Lig).Hidden Then NbVisible = NbVisible + 1 
    Next Lig 
    HT = 200 / NbVisible 
    For Lig = LigDeb To LigFin 
        If Not Rows(Lig).Hidden Then Rows(Lig).RowHeight = HT 
    Next Lig 
End Function

A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
la crotte de charles
4 août 2010 à 22:32
ouais ca marche disons que maintenant j'ai plusieur plages nommé
tableau1
tableau2
tableau3
est ce que je peut alligner ces lignes de code autant de fois que j'ai de plages nommées ?? et pour l'instant il est sous forme de fonction comment puis-je l'associé à un bouton le même que pour mon filtre ( il serait dans la meme macro après le filtre de manière a ce que les lignes s'ajuste avant de voir le résultat de la recherche. Ou p-t mettre se code dans une macro evenementielle qui au déclenchement de mon bouton "recherche" les lignes s'ajuste

Dernier petit bug... si toute les lignes sont masquer il me sort une erreur car division par zéro comment contourné se problème...?

pour le reste c'est nickel ! merci bcp !!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 4/08/2010 à 23:20
J'espère que c'est la dernière modif, j'en ai Ma.. de chaques fois recommencer.
Remplace la macro par...
Public Sub NbVisible(Table As Range) 
Dim Lig As Long, LigDeb As Long, LigFin As Long, HT As Single, VU As Integer 
    LigDeb = Table.Row 
    LigFin = Table.Row + Table.Rows.Count - 1 
    For Lig = LigDeb To LigFin 
        If Not Rows(Lig).Hidden Then VU = VU + 1 
    Next Lig 
    If VU > 0 Then 
        HT = 200 / VU 
        For Lig = LigDeb To LigFin 
            If Not Rows(Lig).Hidden Then Rows(Lig).RowHeight = HT 
        Next Lig 
    End If 
End Sub

et dans le code du bouton..
Private Sub CommandButton1_Click() 
    Application.ScreenUpdating = False
    TaMacroFiltre
    NbVisible Range("Tableau1")
    NbVisible Range("Tableau2")
    '......
    Application.ScreenUpdating = True
End Sub

Vaut mieux laisser les macros séparées.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 août 2010 à 23:39
Si tu a beaucoup de tableaux...
Remplace le code du bouton par..
Private Sub CommandButton1_Click()
Dim i As Integer
    Application.ScreenUpdating = False
    TaMacroFiltre
    With ActiveWorkbook
    For i = 1 To .Names.Count
        If Left(.Names(i).Name, 5) = "Table" Then NbVisible Range(.Names(i).Name)
    Next i
    End With
    Application.ScreenUpdating = True
End Sub

A+
0
la crotte de charles
5 août 2010 à 15:03
voila merci beaucoup tous fonctionne il y a une dernière chose mais c'est parce que je suis trop perfectionniste ca va aller comme ca encore une fois merci de ta patience et de partager ton savoir en prog.
Par contre si tu dit que tu en a ta .... pk vient tu aidé les gens sur ce forum ?
Pour ma part je trouve ca admirable de donner son temps comme ca a des inconnus ...

Merci
Au Plaisir !!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 août 2010 à 16:20
Sic : Par contre si tu dit que tu en a ta .... pk vient tu aidé les gens sur ce forum ?
Je n'en ai pas marre d'aider les gens comme tu dis, ce qui est énervant c'est qu'à chaque fois tu change la situation ce qui oblige à refaire une autre macro et ce, toujours pour le même problème, mal expliquer au départ...
Voilà.
A+
0