Cacher une ligne entre 2 autres........trop dur à expliquer !

kliphude

XLDnaute Nouveau
Bonjour à tous,
J'ai fait un tableau avec mon collègue (en fait c'est surtout mon collègue qui a fait ce tableau..) et afin qu'il soit presque parfait il ma manque une dernière petite macro.
Je joins un bout du fichier pour ceux qui souhaiterai m'aider.
C'est un tableau pour des instit'
j'ai 2 onglets avec les compétences de maths et de francais.
Pour chaque j'ai plusieurs compétences classées par catégorie (format dasn mon fichier)
en face de chaque compétences je dois dire si c'est pour le 1er, 2eme ou 3eme trimestre.
A partir de la le fichier va chercher toutes les lignes des trimestres ainsi que du format et cacher toutes les lignes qui ne corespondent pas à la cellule E1
--> ce qui donne le fichier joint.
Mon problème :
c'est que des fois entre 2 formats, les competences ne correspondent pas au trimestre choisi, ce qui a pour but d'avoir 2 formats qui se suivent (ligne 24 et 27) ( pas sur que je sois tres clair)
J'aimearis donc pouvoir lui dire que :
si dans la colonne A, entre 2 format aucune cellule n'a comme valeur E1 alors il faut cacher la ligne avec le format du dessus (ex : ligne 24)
Bien sur les lignes ne sont jamais a la meme place, et il n' y a jamais le meme nombre.....

Merci a ceux qui auront une petite idée et qui prendrons la peine de m'aider.

Julien. :)
 

Pièces jointes

  • exemple.xls
    27.5 KB · Affichages: 68
  • exemple.xls
    27.5 KB · Affichages: 69
  • exemple.xls
    27.5 KB · Affichages: 71

hoerwind

XLDnaute Barbatruc
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Bonjour et bienvenue sur le forum,

C'est pourtant simple à expliquer !
Masquer les lignes hors titres (Format) et qui sont vides à partir de la colonne G.

Comme les macros ne sont pas ma tasse de thé, en pièce jointe une proposition par filtre automatique.
 

Pièces jointes

  • FiltreLignesVidesHorsTitres.xls
    30.5 KB · Affichages: 56
Dernière édition:

kliphude

XLDnaute Nouveau
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Merci pour votre réponses,
mais ca ne correspond pas a ce que je recherche.
Je ne veux plus que 2 " format" se suivent sans qu'il n'y ai aucune ligne entre les ces 2 formats.
En fait j'aimerai une macro qui me traduirait en français :
Dans colonne A, Si entre 2 "format" aucune des lignes ne correspond à la cellule E1 (le trimestre choisi, issu d'une autre macro), alors il faut cacher le format supérieur.

Pour l'instant mes macro me permettent de prendre toutes les lignes de tous les trimestres ainsi que les lignes formats.
Et après cette macro cache toutes les lignes autres que le trimestre choisi ainsi que format.
Et il m'arrive donc d'avoir 2 formats qui se suivent sans rien entre, et ca j'en veux pas.....

Je sais pas si c'est faisable.

Merci.
 

Efgé

XLDnaute Barbatruc
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Bonjour kliphude, salut hoerwind :),
Une proposition par macro. On doit pouvoir le faire en une seule boucle, mais je n'ai pas trouvé...
VB:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Rows.Hidden = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 8 Step -1
    If Cells(i, 1) <> Cells(1, 5) And Cells(i, 1) <> "Format" Then Rows(i).Hidden = True
Next i
For Each C In Range(Cells(Rows.Count, 1).End(xlUp), Cells(8, 1)).SpecialCells(xlCellTypeVisible)
    If C.Value = Temp And C.Value = "Format" Then Rows(Rep).Hidden = True
    Rep = C.Row
    Temp = C.Value
Next C
With Cells(Rows.Count, 1).End(xlUp)
    If .Value = "Format" Then Rows(.Row).Hidden = True
End With
Application.ScreenUpdating = True
End Sub
Cordialement
EDIT : Changement du code (je cachais la mauvaise ligne format) :eek:
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Re
c'était faisable en une seule boucle...
VB:
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Rows.Hidden = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 8 Step -1
    If Cells(i, 1) <> Cells(1, 5) And Cells(i, 1) <> "Format" Then
        Rows(i).Hidden = True
    Else
        If Cells(i, 1) = Temp And Cells(i, 1) = "Format" Then
            Rows(i).Hidden = True
        End If
        Temp = Cells(i, 1)
    End If
Next i
With Cells(Rows.Count, 1).End(xlUp)
    If .Value = "Format" Then Rows(.Row).Hidden = True
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 
Dernière édition:

kliphude

XLDnaute Nouveau
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Merci beaucoup.....
c'est presque parfait, car en faisant cette macro on ne garde pas la mise en page et la ligne francais.
Mon collègue a créé des valeur (nbremath et nbrefrancais) permettant de definir le nombre de ligne (tout en s'adaptant) dans mathematique (ici pour notre exemple ca irai de ligne 7 à 30) et dans francais.
Peux t'on donc faire cette macro pour valeur "nbremath" et valeur "nbrefrancais"
En tout cas on s'approche du but recherché.
Merci encore.
 

Hippolite

XLDnaute Accro
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Bonjour,
Ajouter "Format" aux dernières lignes de chaque tableau pour qu'un dernier titre seul soit masqué.
VB:
Public Sub Titres()
    Dim c1 As Range, c2 As Range, Plage12 As Range, c As Range, cPl As Range
    Dim firstAddress As String
    With ActiveSheet.Range("A:A")
        Set c1 = .Find("Format", LookIn:=xlValues) 'recherche du 1er Format
        If Not c1 Is Nothing Then
            firstAddress = c1.Address
            Do
                Set c2 = .FindNext(c1) 'recherche du Format suivant
                If c2 Is Nothing Or c2.Address = firstAddress Then Exit Do
                'détermination de la plage entre les deux Format
                Set Plage12 = Range(c1, c2).Offset(1, 0).Resize(Range(c1, c2).Count - 2, 1)
                c1.EntireRow.Hidden = True ' masquage du titre
                For Each cPl In Plage12 'affichage du titre si une cellule de la plage n'est pas masquée
                    If cPl.EntireRow.Hidden = False Then
                        c1.EntireRow.Hidden = False
                        Exit For
                    End If
                Next cPl
                Set c1 = c2 'rebouclage sur les titres
            Loop While Not c1 Is Nothing And c1.Address <> firstAddress
        End If
    End With
End Sub
Je n'ai pas mis les Application.ScreenUpdating = False/True

A+

Eddit : pas rafraîchi, Bonjour Efgé
ça fera une variante
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Re
Sans tenir compte des variables ("nbremath" et "nbrefrancais")
VB:
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Rows.Hidden = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 8 Step -1
    If Cells(i, 1) <> "" Then
        If Cells(i, 1) <> Cells(1, 5) And Cells(i, 1) <> "Format" _
        And Cells(i, 2) <> "Mathématiques" And Cells(i, 2) <> "Français" Then
            Rows(i).Hidden = True
        Else
            If Cells(i, 1) = Temp And Cells(i, 1) = "Format" Then
                Rows(i).Hidden = True
            End If
            Temp = Cells(i, 1)
        End If
    End If
Next i
With Cells(Rows.Count, 1).End(xlUp)
    If .Value = "Format" Then Rows(.Row).Hidden = True
End With
Application.ScreenUpdating = True
End Sub

Cordialement

Edit Bonjour Hippolite
 
Dernière édition:

kliphude

XLDnaute Nouveau
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Re
Sans tenir compte des variables ("nbremath" et "nbrefrancais")
VB:
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Rows.Hidden = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 8 Step -1
    If Cells(i, 1) <> "" Then
        If Cells(i, 1) <> Cells(1, 5) And Cells(i, 1) <> "Format" _
        And Cells(i, 2) <> "Mathématiques" And Cells(i, 2) <> "Français" Then
            Rows(i).Hidden = True
        Else
            If Cells(i, 1) = Temp And Cells(i, 1) = "Format" Then
                Rows(i).Hidden = True
            End If
            Temp = Cells(i, 1)
        End If
    End If
Next i
With Cells(Rows.Count, 1).End(xlUp)
    If .Value = "Format" Then Rows(.Row).Hidden = True
End With
Application.ScreenUpdating = True
End Sub

Cordialement

Edit Bonjour Hippolite

Un grand, grand, merci !!!
c'est exactement ca, ca marche nickel...
Mon fichier est enfin terminé.
Merci encore pour votre aide.
cdlt.
Julien.
 

kliphude

XLDnaute Nouveau
Re : Cacher une ligne entre 2 autres........trop dur à expliquer !

Re-Bonjour,
je me permet de redemnder un peu d'aide.
La c'est vraiment un gros travaill, je comprendrais donc que ca ne vous interesse pas.....Je post au cas ou ....
Mon fichier sert à ma femme institutrice à établir des bulletins en "automatique"
Tout marche a peu pres, ....mais il me reste un problème.
J'explique brievement le fichier.
Ma femme rentre les competences dans l'onglet " math copie" et "français copie". Le nombre de ligne peux donc varier.
En face de chaque competence elle selectionne si c'est au premier, deuxieme ou troisieme trimestre. Elle selection également "format" pour le titre de la competence.
Une fois ttes les competences entrer, elle va dans onglet "liste eleve" elle génere le format, ensuite elle va dans "format" et genere les bulletins.
Le problème concerne le quadrillage du bulletins, en effet, je fait un cadre épais autour des cometences math et francais. Mais si la derniere ligne de math ne correspond pas au trimestre en cours, la ligne se cache et je ne vois donc plus le tarit épais.

J'avais donc pensez, plutot que de cacher les lignes qui ne corresponde pas au trimestre en question " E1", de les supprimer, du coup je pense que careglerai pas mal de pb, et simplifirais le truc.

Je pense que c'est un travail énorme, surtout que les macros ont été faites à l'arrache, y en a dans tous les sens.....

Si il a une personne qui est interessé par ce gros challenge ?? Merci d'avance.
Julien.
 

Pièces jointes

  • Compétence Amelie - 220411.xls
    284.5 KB · Affichages: 72

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 023
Membres
104 007
dernier inscrit
Monvieux