Déterminer nb de jours à partir de la première cellule non vide

Résolu
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.

5 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
    1. Aussie44
       
      Super...merci beaucoup, ca fonctionne très bien !!!!! C'est exactement ce que je cherchais ;o)))
      Mille mercis !!!
      0
    2. Aussie44
       
      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?
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Je regarde la chose.

    A+
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  4. Aussie44
     
    Merci F894009 pour ta réponse et ta rapidité, la macro fonctionne parfaitement !!!
    Y'a plus qu'à la faire tourner maintenant ;o))
    Mille mercis !!!
    0
    1. Aussie44
       
      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?
      0
    2. Aussie44
       
      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.
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Vous pourriez repeter la question ????
      0
    4. Aussie44
       
      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.
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

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

      A+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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+
    0
    1. Aussie44
       
      Macro essayée avec 2000 colonnes et approuvée !!!!
      Merci beaucoup d'avoir consacré du temps à ma question.
      Bonne journée ;o))
      0