Masquer des lignes sous conditions
Résolu
Nepenthes6224
Messages postés
24
Statut
Membre
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
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
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
A voir également:
- Masquer des lignes sous conditions
- Partager des photos en ligne - Guide
- Comment masquer les amis sur facebook - Guide
- Masquer conversation whatsapp - Guide
- Comment appeler en masquer - Guide
- Masquer en ligne instagram - Guide
7 réponses
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 :
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
Bonjour
Difficile de répondre sans le fichier, dans un premier temps essaies ceci pour la ligne 2 de la colonne I (ton exemple)
Cdlmnt
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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!
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!
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