Déterminer nb de jours à partir de la première cellule non vide
Résolu
Aussie44
-
Aussie44 -
Aussie44 -
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.
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.
5 réponses
-
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-
-
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?
-
-
Bonjour,
Je regarde la chose.
A+ -
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+ -
Merci F894009 pour ta réponse et ta rapidité, la macro fonctionne parfaitement !!!
Y'a plus qu'à la faire tourner maintenant ;o))
Mille mercis !!!-
-
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.
-
-
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. -
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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+