Range selon la dernière cellule vide

Bonjour cher Forum!

Je crois avoir un pas pire casse-tête! Je vais tenter de vous l'expliquer du mieux que je peux avec le fichier Excel joint bien entendu.

Comme vous constatez c'est un échéancier sous forme Gantt. Là où j'aimerais une automatisation dans les cellules c'est dans les colonnes G et H quand dans la colonne C il est inscrit "S". Pour le moment quand il est inscrit "S" dans la colonne C il n'écrit aucune date. Ce que je chercher à faire c'est que si il est inscrit "S" dans la colonne C je voudrais que dans la G il est chercher la plus petite date jusqu'au prochain Stade ("S") et que dans la colonne H il est chercher la plus haute date jusqu'au prochain Stade("S"), faisant en sorte qu'on peu voir le début et la fin projeté de chacun des Stades.

Je vous donne un exemple :

On peut voir dans l'échéancier le Stade "Préparation du site" comportant trois tâches. Je voudrais alors que dans la cellule G10 soit inscrit la plus petite date entre les cellules G11:G13 et que dans la cellule H10 il est la plus haute date entre les cellules H11:H13.

La problématique vient du faire que l'échéancier est vivant et doit le rester. Il se peut que les Stades est beaucoup plus ou beaucoup moins de tâches. Il faut donc que la formule soit adaptative en fonction de où se retrouve les "S" dans la colonne C.

Est-ce que c'est quelque chose de possible selon vous? Merci d'avance pour votre aide!

Bonjour,

J'ai créé une fonction DateEtape avec 2 paramètres, 1er = VRAI pour date de début ou FAUX pour date de fin, 2ème = LIGNE()). Cette fonction est ajoutée dans les formules des colonnes G =SI($C10="S";DateEtape(VRAI;LIGNE());SI(... et H =SI($C10="S";DateEtape(FAUX;LIGNE());SI(... qui peuvent être recopiées sur toutes les lignes. Le code est dans Module1.

Cdlt

Bonjour Cylfo!

Ça fonction à la perfection, je te remercie beaucoup! Je ne pensais pas que nous pouvions faire une fonction et l'ajouter dans une formule dans une cellule, je vais bien regarder ce que tu as fais pour apprendre.

Encore une fois merci beaucoup pour ton aide!

Rebonjour Cylfo!

Je remarque que la fonction ne se fait pas totalement automatiquement. Parfois quand je change des éléments déjà en plan il faut que je remette le "S" dans la colonne C où que je joue dans une des cellules. J'ai fait quelque test, mais la problématique continue sans trop comprend pourquoi ça fait ça. Dans mes paramètres Excel tout est activé automatique.

Bonjour Cedl

Avec le fichier exemple, j'ai fait quelques essais mais je n'arrive pas à reproduire le cas. Peux-tu me donner un exemple de saisie qui ne reprovoque pas le recalcul ou me refournir un autre fichier exemple en m'indiquant la saisie à effectuer.

Cdlt,

Cylfo

J'essaie de le reproduire aussi, mais tous semble fonctionner. Je pense que c'est le fait que je joue encore beaucoup dedans pour ajouter des éléments fichiers en soit alors ça doit être ça qui cause les bugs. J'ai fait le test de l'utiliser normalement une fois qui serait terminé et ça fonctionne à merveille. Une fois alerte, merci!

Rebonjour Cylfo,

J'ai découvert quand ça survenait! C'est quand j'ajoute des dates dans les jours fériés, ça vient effacer les dates si on veut et pour les remettre il me suffit juste d'entrer dans la cellule et de simplement sortir ou refaire la saisi du "S" dans la colonne C. C'est vraiment étrange et ça va vite devenir tannant toujours revalider, le but étant que tout ce fasse automatique aussi! Je te remet le fichier en pièce jointe.

Je remarque même qu'en fait, n'importe qu'elle modification sur une autre feuil fait en sorte que les dates ne s'affiche plus. Quand j'ouvre le UserForm et que j'ajoutes des Ressources aussi même problème...

Je reproduis aussi et effectivement c'est étrange et rédhibitoire, je regarde ça !

Je n'ai pas l'explication du pourquoi les résultats de la fonction sont effacés ... Du coup je reviens à ce que j'avais envisagé au début avant de penser à intégrer une fonction personnalisée dans les formules (ce que j'ai déjà fait à maintes reprises et qui fonctionne très bien mais là, pour l'instant, je sèche !).

Le recalcul des dates de début et de fin projetés est déclenché par les évènements Change des feuilles :

  • [ÉCHÉANCIER DU PROJET] : recalcul de l'étape concernée si la modification intervient dans les colonnes "C", "F", "L" et "N". Se sont les colonnes que j'ai identifiées comme étant saisissables et pouvant avoir une incidence sur les dates. S'il y en a d'autres, il faudra compléter le code.
  • [DATA_EH] : si le tableau "TB_Joursféries" est modifié, dans ce cas toutes les étapes "S" sont recalculées.

Par conséquence, les étapes "S" ne comportent plus de formules dans les colonnes de date et sur les autres lignes, j'ai remplacé l'appel à la fonction par "" (qui était la valeur initiale).

Je te laisse tester plus complètement (pour les jours fériés, j'ai vérifié que cela redéclenchait bien le recalcul mais je ne sais pas construire un cas où le changement / ajout d'une date aurait une incidence sur les dates de l'étape).

Rebonjour!

J'ai tenter plusieurs choses aussi de mon côté sans succès également. Ce n'est pas la fin du monde du fait qu'on ajoute les jours fériés et les personnes affectés au projet avant de faire l'échéancier normalement. Toute fois le fichier est rendu très lent. Ça devient impossible à travailler efficacement... Est-ce que ça vous fait la même chose ou c'est seulement de mon côté?

re,

oui, c'est lent, pourtant cela n'a pas l'air compliqué. Je ne comprends pas les formules de G:H et je les ai copié et collé comme valeurs pour voir si ces formules étaient la cause, apparament, non, je pense que ce sont les MFCs. Mais ça, je n'ai pas bien étudié.

Un changement, un event de changement dans la feuille "DATA_EH" et la macro "Mes_JF" qui crée la plage "Jours_Fériés" avec pour le moment une trentaine de lignes au lieu de 10.000 (PS. le fichier en PJ montre ces 2 macros, pour le reste oubliez-le)

private Sub Worksheet_Change(ByVal Target As Range)

     Dim DBR: Set DBR = Me.Range("TB_Joursfériés").ListObject.DataBodyRange
     If Not Intersect(Target, DBR) Is Nothing Then Mes_JF
End Sub

Sub Mes_JF()

     Dim Dict, aA, i, j
     Dim sh: Set sh = Sheets("DATA_EH")
     Dim DBR: Set DBR = Range("TB_Joursfériés").ListObject.DataBodyRange

     Set Dict = CreateObject("scripting.dictionary")
     aA = DBR.Value2                         'contenu du tableau avec les jours fériés
     For i = 1 To UBound(aA)                 'boucler ces jours
          If aA(i, 3) = "" Then aA(i, 3) = aA(i, 3)     'jour "à" est inconnu, alors égal au jour "de"
          For j = aA(i, 2) To aA(i, 3)
               Dict(j) = 0
          Next
     Next

     If Dict.Count <= 1 Then                 'normallement il y a > 1 jours fériés, si ce nombre est <= 1, ajouter quelque dummies
          Dict("dummy1") = 0
          Dict("dummy2") = 0
     End If

     With sh.Range("A1").Resize(Dict.Count)  'nombre de jours fériés
          .EntireColumn.ClearContents
          .Value = Application.Transpose(Dict.keys)
          .Name = "Jours_Fériés"
     End With

End Sub

Bonjour BsAlv,

Excuse-moi pour le délai, j'ai fait plusieurs tests pour être certain que ça fonctionnait bien et j'avais beaucoup de réunion à travers! Simplement prendre le temps quand même de te dire que ça fonctionne à la perfection ce que tu m'as envoyé.

Merci beaucoup!

Rechercher des sujets similaires à "range derniere vide"