Masquer des lignes sous conditions

Résolu
Nepenthes6224 Messages postés 24 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

7 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    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
    1. Nepenthes6224 Messages postés 24 Statut Membre 5
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. Nepenthes6224 Messages postés 24 Statut Membre 5
     
    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
  4. Nepenthes6224 Messages postés 24 Statut Membre 5
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nepenthes6224 Messages postés 24 Statut Membre 5
     
    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
  7. Nepenthes6224 Messages postés 24 Statut Membre 5
     
    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
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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