XL 2016 VBA Masquer des lignes si elles ne sont pas comprises entre deux dates renseignées dans deux cellules

Eltipekeur

XLDnaute Nouveau
Bonjour à tous, je suis nouveau sur le forum et j'ai parcouru nombre de fils de discussion qui m'ont aidé à avancer sur des fichiers et tout particulièrement en VBA, aujourd'hui je fais appel à vous car je suis face à un mur depuis plusieurs jours, voila ce que je souhaites réaliser et le problème :
A partir de deux cellules où l'on rentre des bornes sous forme de date (N6 pour la date de début et P6 pour la date de fin), je souhaites dans un tableau qui commence à partir de la ligne 10 et termine en ligne 203, que chaque ligne, dont la date (située en colonne B) n'est pas comprise entre les bornes indiquées précédemment, soit masquée via un bouton.
Voici le code réalisé mais malheureusement celui-ci ne fonctionne pas :

Sub selection_lignes()
Rows("1:203").Select
'plage de rentrée des données
Selection.EntireRow.Hidden = False
ActiveCell.Select
Dim derligne As Long, i As Long
'numéro de la dernière ligne utilisée
derligne = Cells(203, "B").End(xlUp).Row
For i = 10 To derligne
If Cells(i, "B") > Cells(6, "P") Then Rows(i).Hidden = True
If Cells(i, "B") < Cells(6, "N") Then Rows(i).Hidden = True
Next i
End Sub

Merci à vous de votre précieuse aide
 

Eltipekeur

XLDnaute Nouveau
Bonjour Chris, merci de votre réponse, disons que j’aimerais que la sélection découle sur une impression de feuilles via un bouton et qu’une fois réalisée toutes les lignes soient de nouveau visibles,
Ce qui est bizarres c’est que j’ai réalisé le même type de formule dans un fichier et que celle ci fonctionne contrairement au fichier dont je vous ai parlé mais je n’arrive pas à comprendre pourquoi
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Eltipekeur, Chris,
Un petit fichier test eut été le bienvenu, cela éviterait de se le retaper.
D'autre part utilisez les balises ( </> ) pour le code c'est plus lisible.
Votre macro telle qu'écrite marche. Voir PJ.
J'ai rajouté une version un peu optimisée avec :
VB:
Sub selection_lignes2()
    Dim i%, Deb, Fin
    Application.ScreenUpdating = False
    Rows("1:203").EntireRow.Hidden = False
    Deb = [N6]: Fin = [P6]
    For i = 10 To Cells(203, "B").End(xlUp).Row
        If Cells(i, "B") > Fin Or Cells(i, "B") < Deb Then Rows(i).Hidden = True
    Next i
End Sub
 

Pièces jointes

  • Eltipekeur.xlsm
    18.1 KB · Affichages: 5
Dernière édition:

Phil69970

XLDnaute Barbatruc

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Phil,
Derligne me semble correct avec le code :
1644401250346.png
 

Eltipekeur

XLDnaute Nouveau
Bonjour sylvanu,
j'ai ajouté votre code dans ma feuille directement que je met en PJ afin de travailler directement dessus malheureusement, même problème qu'avec le mien, les lignes ne se masquent pas
 

Pièces jointes

  • Classeur Eltipekeur.xlsm
    90.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Votre tableau est "plein" jusqu'à la ligne 203, dans ce cas DL renvoie 8 (ça je ne sais pas pourquoi )
Il faut au moins une cellule vide pour trouver DL, soit :
VB:
derligne = Cells(204, "B").End(xlUp).Row
ou plus simple
derligne = Cells(65000, "B").End(xlUp).Row
En PJ les 2 macros modifiées. ( j'ai rajouté le bouton Visible, c'est mieux pour les tests )
@Phil,
C'est le même problème que je ne comprends pas. Si la dernière cellule de la plage est non vide alors Derligne est faux. Si vous mettez 65000 alors il est correct. :rolleyes:
Ma première PJ marche car je n'ai rempli que B9:B44 car trop fainéant, d'où l'utilité d'un fichier test représentatif. :)
 

Pièces jointes

  • Classeur Eltipekeur V2.xlsm
    100.5 KB · Affichages: 4

Discussions similaires

Réponses
10
Affichages
672
Réponses
3
Affichages
1 K
Réponses
6
Affichages
755

Statistiques des forums

Discussions
298 861
Messages
1 972 353
Membres
203 675
dernier inscrit
arthur021