Masquer des lignes sous conditions

Résolu/Fermé
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 - 16 avril 2018 à 16:45
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 17 avril 2018 à 14:42
Bonjour,

Je suis débutante en VBA, donc ma question va peut-être paraître stupide, mais j'aimerais masquer des lignes sous deux conditions. Mon problème est le suivant :
Je dois reprendre une macro super longue créée par quelqu'un d'autre (qui a quitté la société) et rajouter un masquage de lignes (les lignes peuvent soit être masquées soit supprimées). La macro est super longue, avec déjà plein de variables etc de prédéfinies (fichier "confidentiel", évidemment, du coup, impossible de le poster ici). En gros, elle reprend des données d'une feuille qu'elle transforme en une "ligne du temps" (une colonne = une semaine ou un mois et une ligne = un projet donné). Cette ligne du temps est créée dans 3 feuilles différentes (l'un pour les mois, les deux autres pour les semaines).
Cela pour expliquer la complexité.
Je dois supprimer/masquer les lignes dont le projet a abouti (colonne I = 100 ) et dont la date de fin (colonne G de la feuille de référence) précède la date de demande d'update (définie comme variable startmonth) :

Voilà ce que j'ai créé et qui bugge :

'----------> Hide rows

Range("I2").Select
If ActiveCell.Value = "100" And Sheets(ACTIVITY).Range("G2") < startMonth Then ActiveCell.EntireRow.Hidden = True


Mes deux questions :
1) Où est le bug/comment faire pour ne plus en avoir?
2) Comment faire pour qu'ensuite cela s'applique à toutes les lignes sachant qu'il me met que la variable i est déjà utilisée?

Merci d'avance

7 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
16 avril 2018 à 18:21
Bonjour,

Pas sûr que ce soit bon, mais si "ACTIVITY" est le nom de l'onglet, il faut le mettre entre guillemets. Le message d'erreur au débogage devrait t'indiquer quelque chose dans ce sens. (ACTIVITY non définie)
Pour passer de ligne en ligne il faut une boucle.

Essaie :
ligne=2
While Cells(ligne,9).Value <> ""
If Cells(ligne,9).Value = "100" And Sheets("ACTIVITY).Range("G" & ligne) < startMonth Then Cells(ligne,9).EntireRow.Hidden = True 
ligne=ligne+1
Wend
0
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 5
17 avril 2018 à 10:00
Merci pour ta réponse, mais quand j'essaie ta boucle, j'ai une erreur aussi :


Sheets(sheetName).Cells(numero, 9).Select
ligne = 2
While Cells(ligne, 9).Value <> ""
If Cells(ligne, 9).Value = "100" And Sheets(SHEET_ACTIVITY).Range("G" & ligne) < startMonth Then Cells(ligne, 9).EntireRow.Hidden = True
ligne = ligne + 1

Wend
error 1004 : application-defined or object-defined error
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
16 avril 2018 à 18:30
Bonjour

Difficile de répondre sans le fichier, dans un premier temps essaies ceci pour la ligne 2 de la colonne I (ton exemple)
Range("I2").Select
If ActiveCell.Value = 100 And Sheets("ACTIVITY").Range("G2") < startMonth Then ActiveCell.EntireRow.Hidden = True


Cdlmnt
0
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 5
Modifié le 17 avril 2018 à 09:50
Merci pour vos réponses.
Actuellement, j'ai ceci qui ne me met pas de bug (en fait, ma feuille "Activité" se nomme de 3 manières, je ne comprends pas, du coup je me suis plantée : elle s'appelle "feuil1", Activité, et SHEET_ACTIVITY. Difficile de comprendre le pourquoi du comment). En corrigeant, il ne me mets plus d'erreur :

'-----------> Hide rows

Dim numero As Integer
numero = 3
While numero <= 999
Sheets(sheetName).Cells(numero, 9).Select

If ActiveCell.Value = "100" And Sheets(SHEET_ACTIVITY).Cells(numero, 7) < startMonth Then ActiveCell.EntireRow.Hidden = True

Cells(numero, 9) = numero
numero = numero + 1

Wend

Par contre, dépendant de où je le place dans cette immense macro, soit il ne fait rien, soit il remplace ma colonne G par les chiffres de 3 à 999
0
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 5
Modifié le 17 avril 2018 à 11:28
J'ai ceci où il ne me remplace plus les données par des chiffres et où il ne me met pas de bug, mais je n'ai aucune ligne qui se cache :


For i = 1 To 999

Next

Sheets(sheetName).Cells(i, 9).Select

If ActiveCell.Value = "100" And Sheets(SHEET_ACTIVITY).Cells(i, 7) < startMonth Then ActiveCell.EntireRow.Hidden = True

Cells(i, 9) = i
i = i + 1
0

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

Posez votre question
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 5
17 avril 2018 à 12:49
Je pense que la macro ne fait rien car ma date en colonne G est jj/mm/aaaa et ma "start date" est juste un mois. Du coup, j'essaie de convertir le tout en une date, mais ça plante. Sachant que le mois et l'années sont deux variables mises dans des cellules différentes (et que l'on fait varier selon ce que l'on veut voir apparaître de la ligne du temps) ( = startMonth et startYear) :

For i = 3 To 999

Next
Dim endproject As Date

endproject = "startMonth" & "startYear"
Sheets(sheetName).Cells(i, 9).Select

If ActiveCell.Value = "100" And Sheets(SHEET_ACTIVITY).Cells(i, 7) < endproject Then ActiveCell.EntireRow.Hidden = True

Cells(i, 9) = i
i = i + 1
0
Nepenthes6224 Messages postés 24 Date d'inscription mercredi 2 janvier 2013 Statut Membre Dernière intervention 17 avril 2018 5
17 avril 2018 à 14:26
Bon, finalement, j'ai trouvé un truc plus simple, j'ai seulement rajouté des colonnes dans la feuille de départ, où je mets mes conditions (et ça met un x quand les conditions sont réunies), et dans la macro, je ne sélectionne que les lignes où le x est mis :-)
En effet, mon bug est du au format "date" (bien que j'aie essayé de mettre le format en date, ça se plante. Idem de toute façon dans les conditions "excel" (et non vba), j'ai dû mettre (if G2<DATE(Home_E4) sinon il ne le comprenait pas comme une date (bien que ma cellule est inscrite comme une date).

Merci à tous!
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
17 avril 2018 à 14:42
Sans le fichier, on joue un peu aux devinettes.......
Un exemple qui te montrera comment tu peux tenter faire ça
https://www.cjoint.com/c/HDrmOO7GPwB

Cdlmnt
0