Récupérer des données dans une cellule suivante

Bonjour,

j'ai un tableau avec des dates, et en fonction de la ligne (je mets des croix dans la semaine choisie) il me sort la date de début : ça c'est fait.

Mais je voudrais, en fonction de la durée (en semaine) qu'excel me donne la date correspondant à la date du tableau, N semaines plus tard.

Dans un deuxième temps, je voudrais réitérer cette manœuvre mais avec la période suivante...

Je vous joints un tableau test, se sera plus simple à comprendre...

Merci de votre aide

15test-dates.xlsx (13.01 Ko)

Bonjour Arturo83,

Votre solution fonctionne bien, mais en VBA...

Si je veux l'adapter sur un autre tableau, par exemple mettre ce récapitulatif sur une autre feuille, changer des dispositions dans le tableau du haut, je vais être super embêté, je n'y connais rien en VBA.

De plus, il compte le nbre de semaine, mais lorsqu'il y a 1 croix, =1, 2 croix =1 3 croix =2...

Si on met une croix en G16, sans autre dans la ligne, il renvoie bien la date du début de période 1 en D5, mais en F5, il renvoie la date du vendredi suivant (15/10) alors qu'il devrait renvoyer le 8/10.

3ème petit soucis, si j'ai plus de 2 périodes, je serais totalement incapable de rajouter des lignes au tableau du haut...

Je cherche des solutions simples que je puisse adapter dans toutes les situations, je suis conscient du temps que vous avez consacré à cette programmation en tiens à vous en remercier, mais en l'état, je ne pourrais pas le retranscrire dans les tableaux que j'ai.

Je vais essayer encore et encore avec Equiv, index et recherche et essayer d'autres formules de "base".

D'ailleurs, mon gros soucis, j'ai du mal expliquer, c'est qu'une fois la période1 trouvée, je voudrais qu'il repère la période suivante (la première semaine avec croix après la semaine sans croix)...

Merci de votre aide

Voilà une modif.

J'ai modifié la présentation de tableau des résultats, j'y ai mis une recherche sur 10 périodes, vous pouvez en mettre autant que vous voulez et recopiant une des lignes à la suite. le programme fera le reste.

J'ai déplacé le tableau à la ligne 100 ce qui vous laisse de la marge pour augmenter le tableau du dessus.

il me reste à faire disparaître les "#VALEUR" quand il n' y a pas de périodes trouvées, mais là je n'ai pas le temps, je regarderai plus tard.

Cdlt

Alors, là ! c'est au top !!!

M E R C I !!

J'ai même réussi à augmenter la zone de nom clients sans que cela n'interfère dans le tableau !

Est ce que sans la partie VBA cela pourrait fonctionner?

Beau travail !!!

C'est très bien !!!

Merci

Est ce que sans la partie VBA cela pourrait fonctionner?

Non. Puisque au lieu d'écrire un tas de formules à rallonge, un bout de code fait le travail, donc il faut recopier le code si vous voulez travailler sur un autre fichier.
Le code est réparti en 2 endroits:
- Une partie dans le module de la feuille 1 pour détecter toutes modifications sur cette feuille, et qui va appeler les fonctions personnalisées.
- L'autre partie dans un module standard qui est la création de ces fonctions personnalisées.

Le code dans le module de la feuille 1:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Sortie
    Application.EnableEvents = False
    Range("D5").FormulaR1C1 = "=IF(deb_periode1(R2C6)=0,"""",deb_periode1(R2C6))"
    Range("F5").FormulaR1C1 = "=IF(Fin_Periode1(R2C6)=0,"""",Fin_Periode1(R2C6))"
    DerLig = Range("C99").End(xlUp).Row
    For i = 6 To DerLig
        Range("D" & i).FormulaR1C1 = "=IF(Deb_Periode2(R2C6,R[-1]C7)=0,"""",Deb_Periode2(R2C6,R[-1]C7))"
        Range("F" & i).FormulaR1C1 = "=IF(Fin_Periode2(R2C6,R[-1]C7)=0,"""",Fin_Periode2(R2C6,R[-1]C7))"
    Next i
Sortie:
    Application.EnableEvents = True
End Sub

le code dans le module standard:

Public Lig As Long, Col As Long

Function Deb_Periode1(Lig As Long) As Date
    DerCol = Range("ZZ100").End(xlToLeft).Column
    With Range(Cells(Lig, "C"), Cells(Lig, DerCol))
        Set x = .Find("x")
        If Not x Is Nothing Then
            Col = x.Column
            Deb_Periode1 = Cells(100, Col)
        Else
            Deb_Periode1 = 0
        End If
    End With
End Function

Function Fin_Periode1(Lig As Long) As Long
    DerCol = Range("ZZ100").End(xlToLeft).Column
    With Range(Cells(Lig, "B"), Cells(Lig, DerCol))
        Set x = .Find("x")
        If Not x Is Nothing Then
            Prem_Col = x.Column
            Col = x.Column
            Do
                Col = Col + 1
            Loop While Cells(Lig, Col) <> ""
            Fin_Periode1 = Cells(101, Col - 1)
        Else
            Fin_Periode1 = 0
        End If
    End With
End Function

Function Deb_Periode2(Lig As Long, Col_Deb As Long) As Date
    DerCol = Range("ZZ100").End(xlToLeft).Column
    If Col_Deb > 0 Then
        With Range(Cells(Lig, Col_Deb + 1), Cells(Lig, DerCol))
            Set x = .Find("x")
            If Not x Is Nothing Then
                Col = x.Column
                Deb_Periode2 = Cells(100, Col)
            Else
                Deb_Periode2 = 0
            End If
        End With
    End If
End Function

Function Fin_Periode2(Lig As Long, Col_Deb As Long) As Long
    DerCol = Range("ZZ100").End(xlToLeft).Column
    If Col_Deb > 0 Then
        With Range(Cells(Lig, Col_Deb + 1), Cells(Lig, DerCol))
            Set x = .Find("x")
            If Not x Is Nothing Then
                Prem_Col = x.Column
                Col = x.Column
                Do
                    Col = Col + 1
                Loop While Cells(Lig, Col) <> ""
                Fin_Periode2 = Cells(101, Col - 1)
            Else
                Fin_Periode2 = 0
            End If
        End With
    End If
End Function

Pour accéder au code, faire ALT + F11.

Cdlt

Impec !

ça a l'air tellement simple !

et en regardant toutes ces lignes, ça se complique !!!

Merci du temps passé sur mon soucis, je vais l'appliquer à mon fichier ... et essayer

Merci

Bonjour,

Voilà comme promis le correctif (Suppression des affichages "#VALEUR")

Cdlt

Impecc !!

Merci pour tout !!

Rechercher des sujets similaires à "recuperer donnees suivante"