Menu

Déterminer nb de jours à partir de la première cellule non vide [Résolu/Fermé]

- - Dernière réponse :  Aussie44 - 28 juin 2013 à 12:35
Bonjour,

Débutante en VBA, j'aurais grand besoin d'aide pour effectuer la tache suivante.

Je cherche à déterminer le nombre de jours entre 2 dates...pas trop difficile pour moi jusque là sauf que je souhaite déterminer ce nombre de jours à partir de la première cellule non vide et jusqu'à la dernière cellule non vide.

Pour faire simple, je joins un fichier excel avec 3 colonnes (la première est une colonne de dates et les 2 autres sont des colonnes de cellules vides et non vides).
J'aurai besoin 'identifier pour chaque colonne à partir de B (et reporter si possible cette information après la dernière ligne de la colonne considérée), la date (située en colonne A) de la première cellule non vide de la colonne B (à reporter en B3350) et la date de la dernière cellule non vide de la colonne B (à reporter en B3351). Idem pour C, date de début de la première cellule non vide (à reporter en C3350) et date de la dernière cellule non vide (à reporter en C3351).

Dans la réalité j'ai un fichier de plus de 7000 colonnes, il faudrait que je puisse incrémenter sur une plus grosse base de données que celle donnée dans l'exemple.

Un grand merci par avance de votre aide.
Afficher la suite 

5 réponses

Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146
0
Merci
Bonjour,

adaptez les cellules de copie, le nombre de colonnes et la lgne de depart.

Sub Bouton1_Clic()
    Application.ScreenUpdating = False
    With Worksheets("feuil1")
        'ligne de depart
        lig = 1
        For x = 2 To 5
            'premiere cellule non vide
            valcherch = "*"
            lig = .Columns(x).Find(valcherch, .Cells(lig, x), , xlPart).Row
            .Cells(36, x) = .Cells(lig, "A")
            'derniere cellule non vide
            valcherch = ""
            lig = .Columns(x).Find(valcherch, .Cells(lig, x), , xlPart).Row - 1
            .Cells(37, x) = .Cells(lig, "A")
        Next x
    End With
    Application.ScreenUpdating = True
End Sub

Bonne suite
Super...merci beaucoup, ca fonctionne très bien !!!!! C'est exactement ce que je cherchais ;o)))
Mille mercis !!!
Encore merci pour la macro F894009. Elle fonctionne très bien lorsque entre ma première cellule non vide et ma dernière cellule non vide, je n'ai que des cellules non vides. Or je viens de m'apercevoir que dans certaines colonnes, des cellules vides s'intercalent entre ma première cellule non vide et ma dernière cellule non vide. Du coup j'aurais aimé modifier la macro en recherchant non pas la dernière cellule non vide mais la première cellule non vide en partant de ma dernière ligne et en remontant vers ma première. J'ai essayé quelques bidouillages mais sans grand succès. Est-ce que quelqu'un aurait une idée?
Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146
0
Merci
Bonjour,
Je regarde la chose.

A+
Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146
0
Merci
Re,



Sub Bouton1_Clic()
Dim plage As Range
Application.ScreenUpdating = False

With Worksheets("feuil1")
'derniere cellules non vide colonne A
lig = Range("A" & Rows.Count).End(xlUp).Row
'boucle sur les colonnes
For x = 2 To 4
'ligne de depart
lig1 = 1
'premiere cellule non vide
valcherch = "*"
lig1 = .Columns(x).Find(valcherch, .Cells(lig1, x), , xlPart).Row
.Cells(36, x) = .Cells(lig1, "A")
'derniere cellule non vide en partant du bas
Set plage = .Range(Chr(x + 64) & "1:" & Chr(x + 64) & CStr(lig))
a = plage.Address
For ligplage = lig To 1 Step -1
If .Cells(ligplage, x) <> "" Then
.Cells(37, x) = .Cells(ligplage, "A")
Exit For
End If
Next ligplage
Next x
End With
Application.ScreenUpdating = True
End Sub


dans le code precedent il y a une erreur pour ligne de depart(pas au bon endroit), corrige dans le code ci-dessus

A+
0
Merci
Merci F894009 pour ta réponse et ta rapidité, la macro fonctionne parfaitement !!!
Y'a plus qu'à la faire tourner maintenant ;o))
Mille mercis !!!
Bon ben me revoici car en la faisant tourner sur mon échantillon total (615 colonnes et 5756 lignes), je m'aperçois qu'elle me renvoie pas les infos de la colonne B jusqu'à la colonne Z et après rien. Aurais-tu une idée F894009?
J'ai fait une erreur dans mon précédent message. La macro ne me renvoie les dates que pour les lignes des colonnes B à Z, pour les lignes suivantes je n'ai rien d'afficher. le fichier que j'ai utilisé pour la faire tourner est le plus petit en terme de colonnes car j'en ai avec près de 8000 colonnes à traiter.
f894009
Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146 -
Bonjour,

Vous pourriez repeter la question ????
Bonjour,
Oui pas de soucis, je vais tacher d'être plus claire.
La macro a pour objectif de renvoyer la date (colonne A) associée à la première cellule non vide et à la dernière cellule non vide de chaque colonne de ma feuille (colonnes B et suivantes).
En pratique j'ai 615 colonnes, je cherche donc à identifier pour chacune de mes colonnes en partant de la colonne B, les dates (données en colonne A) correspondantes à la première cellule non vide et la dernière cellule non vide de chaque colonne.
Or quand j'applique la macro, elle ne me renvoie les dates que pour les colonnes A à Z, pour les autres colonnes je n'ai aucun résultat.
f894009
Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146 -
Bonjour,

C'est normal, autant pour moi, je regarde pour vous modifier le code.

A+
Messages postés
14457
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2019
1146
0
Merci
Re,

code modifie:

Sub test()
    Dim plage As Range
    Application.ScreenUpdating = False

    With Worksheets("feuil1")
        'derniere cellules non vide colonne A
        lig = Range("A" & Rows.Count).End(xlUp).Row
        'boucle sur les colonnes
        For x = 721 To 724
            'ligne de depart
            lig1 = 1
        '   premiere cellule non vide
            valcherch = "*"
            lig1 = .Columns(x).Find(valcherch, .Cells(lig1, x), , xlPart).Row
            .Cells(36, x) = .Cells(lig1, "A")
            'derniere cellule non vide en partant du bas
            Set plage = .Range(Cells(1, x), Cells(lig, x))
            a = plage.Address
            For ligplage = lig To 1 Step -1
                If .Cells(ligplage, x) <> "" Then
                    .Cells(37, x) = .Cells(ligplage, "A")
                    Exit For
                End If
            Next ligplage
        Next x
    End With
    Application.ScreenUpdating = True
End Sub


A+
Macro essayée avec 2000 colonnes et approuvée !!!!
Merci beaucoup d'avoir consacré du temps à ma question.
Bonne journée ;o))