cacher des lignes

S

Shyl

Guest
Bonjour, suis tout nouveau sur le forum :)
Je suis en stage entreprise de fin de 2ème année d'école d'ingénieur et j'aurais besoin de traiter un fichier excel contenant des numéros de plaques d'immatriculation de voitures et les opérations qu'elles ont subies ou qu'elles subiront ainsi que les dates associées.

Le principe de ma macro serait de permettre à l'utilisateur de sélectionner un intervalle de dates à étudier, le fichier n'afficherait plus que les voitures ayant des opérations dans cet intervalle ainsi que ces mêmes voitures avec les autres opérations enregistrées. (suis pas sur d'être très clair)

J'aurai donc besoin de savoir comment cacher des lignes d'un fichier excel.
J'ai essayé : ActiveCell.Offset(1, 0).EntireRow.Hidden = True mais ca ne marche pas.

De plus l'utilisateur entre une date dans une MsgBox, qui est récupérée dans une variable (debut et fin).
Lorsque j'essaie ensuite de tester les dates du tableau pour voir si elles appartiennent à l'intervalle le test ne fonctionne pas non plus.
Comme je sais qu'Excel peut comparer des dates (cf Filtre) je me demande ce qu'il faut faire

Naïvement ça donnait ça chez moi :


Date = Cells(num_cell, 2)
If Date < fin And Date > debut Then ...


Voili voilou merci d'avance des réponses :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Shyl, bonjour le forum,

Tout d'abord je suis étonné que tu puisses utiliser Date comme variable car c'est est un mot-clé VBA qui renvoie la date système de ton ordinateur. C'est peut-être pour ça que ça ne marchait pas...
Sinon en pièce jointe un fichier basé sur ta description qu'il te faudra adapter.
[file name=Shyl.zip size=17255]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Shyl.zip[/file]
 

Pièces jointes

  • Shyl.zip
    16.9 KB · Affichages: 31
S

Shyl

Guest
Merveilleux, en plus je me suis promené sur le forum, je crois que je vais me mettre a Visual Basic rien que pour l'ambiance du forum :)
Pas le temps ce soir mais j'essaie d'adapter ton code pour faire ce que je veux dès demain.
Je te tiens au courant (quand j'ai une solution vivante à tous mes problèmes je la lâche pas ;) ).
Merci encore
A bientôt
 
S

Shyl

Guest
Donc j'ai bien regardé ce que tu m'as fait. Si j'ai bien compris tu filtres normalement dans ton exemple.
Moi mon problème c'est que si par exemple je renomme la plaque numero14 qui a comme date le 14/05/2005 en plaque numero2, tout en lui laissant sa date du 14/05/2005.
Il y aura alors une plaque numero2 au 02/05/2005 et une au 14/05/2005, je souhaiterai qu'en filtrant entre le 01/05/2005 et le 10/05/2005 on garde dans le tableau les 2 occurences de numero2.

Le but étant que la personne qui s'occupe des dates de révision des voitures puisse sélectionner une période et garder dans le tableau les voitures ayant une révision à ce moment mais aussi pour ces voitures toutes les révisions futures ou passées qui seraient enregistrées dans le tableau.

C'est pour ça que je souhaitais trouver une commande qui permette de cacher les lignes, je compte essayer de programmer un filtre spécifique en quelque sorte (il y a peut être plus simple mais mon statut de newbie du VBA m'empêche de m'en rendre compte).


Voilà voilà ;)

P.S : je joins le fichier Shyl
 
S

Shyl

Guest
Nondidjiu, chuis boulet c'est pas possible, comment on fait pour le joindre ce truc ?
Peut être parce qu'ils ont pas Winzip à la RATP ?
3ème essai : [file name=Shyl_20050705104409.zip size=17248]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Shyl_20050705104409.zip[/file]
 

Pièces jointes

  • Shyl_20050705104409.zip
    16.8 KB · Affichages: 25
S

Shyl

Guest
Bon dernier post, après j'arrête de m'exiter trop vite, finalement ça ne fonctionne pas, ça m'a juste caché une ligne sur 2.
Même zippé le fichier excel est trop gros pour que je le mette en lien.
Je recopie ma macro :


Sub tri()
'
' selection Macro
' Macro enregistrée le 01/07/2005 par user

' On désactive le rafraichissement de l'écran
Application.ScreenUpdating = False
' nbRow : nombre total de lignes
nbRow = Range('A1').CurrentRegion.Rows.Count

' on classe le tableau excel par plaque de voiture et date
Range('A1:G' & nbRow).Sort Key1:=Range('A2'), Order1:=xlAscending, Key2:= _
Range('B2'), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal

' debut et fin : dates limites du filtre
debut = InputBox('Entrez la date de début de sélection')
fin = InputBox('Entrez la date de fin de sélection')

'on commence par récupérer dans un tableau les plaques à afficher

a_cacher = False 'détermine si il faut cacher ou non la cellule
Dim a_afficher()
ReDim a_afficher(nbRow) 'la taille maximale est nbRow
Dim num_cell As Integer 'variable de boucle sur le tableau excel
Dim indice_tab As Integer 'variable d'indice du tableau

indice_tab = 1

For num_cell = 2 To nbRow
Cells(num_cell, 1).Select
date_revision = Cells(num_cell, 2).Value 'date associée à la plaque considérée
If date_revision < fin And date_revision > debut Then
'on affiche et on stocke dans le tableau
a_afficher(indice_tab) = Cells(num_cell, 1).Value
indice_tab = indice_tab + 1
a_cacher = False
Else
a_cacher = True
End If
ActiveCell.Offset(1, 0).EntireRow.Hidden = a_cacher
'cette dernière ligne était sensée désactiver ou non l'affichage de la cellule (marche pas)
num_cell = num_cell + 1
Next

taille_tab = indice_tab - 1 'taille effective du tableau

'a_afficher contient maintenant la liste des plaques de voiture dont la date correspond
'à la sélection, elles sont de plus classées dans le même ordre(croissant) que sur la feuille excel
'il faut maintenant rajouter toutes les plaques étant dans le tableau mais dont l'affichage
'aurait été désactivé


'on parcourt toute la feuille excel pour rajouter les plaques qui nous intéressent
indice_tab = 1
Dim plaque

For num_cell = 2 To nbRow
Cells(num_cell, 1).Select
plaque = Cells(num_cell, 1).Value
If plaque < a_afficher(indice_tab) Then 'il faut progresser dans la feuille excel
num_cell = num_cell + 1
ElseIf plaque = a_afficher(indice_tab) Then 'il faut afficher cette ligne
ActiveCell.Offset(1, 0).EntireRow.Hidden = False
num_cell = num_cell + 1
Else 'il faut progresser dans le tableau
Do While plaque > a_afficher(indice_tab) And indice_tab < taille_tab
indice_tab = indice_tab + 1
Loop
End If
Next

'On retrie pour afficher par plaques d'abord et dates ensuite
Range('A1:G' & nbRow).Sort Key1:=Range('A2'), Order1:=xlAscending, Key2:= _
Range('B2'), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal



'Pour améliorer, il faudrait ensuite que l'on puisse réafficher en triant par date d'évènement
'tout en regroupant par plaque de voiture (même principe que pour le tri)

' on réactive le rafraîchissement de l'écran
Application.ScreenUpdating = True

End Sub


Voilà, voilà dsl pour le spam du post
 

Discussions similaires

Statistiques des forums

Discussions
312 520
Messages
2 089 293
Membres
104 092
dernier inscrit
karbone57