IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour convertir une fourchette de dates en plusieurs lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2013
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 220
    Par défaut Macro pour convertir une fourchette de dates en plusieurs lignes
    Bonjour,

    Dommage que personne n'ait répondu à cette discussion, celle-là m'intéresserait bien aussi. Je n'ai pas besoin de diviser les montants cependant, juste de créer autant de lignes qu'il y a de mois entre les deux dates, avec en prime, bien sûr, le mois en question en colonne A par exemple. Parce que à faire à la main pour 350 enregistrements dont les dates diffèrent toutes (jusqu'à 140 mois pour certains), ça va être long.....

    Bonne journée tous !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    comment se présentent les données source exactement ? (une description, pas un fichier en pj svp ... une copie écran à la rigueur)

    à quel endroit et comment doivent se présenter les données de sortie ?

    par exemple, sur la copie écran du premier message, un code VBA sera une usine à gaz, il faut préparer le terrain :

    - modifier le format des dates début et fin : utiliser 01/XX/XXXX
    - éventuellement ajouter une colonne avec le nombre de mois d'intervalle, via la fonction DATEDIF(Date_Debut;Date_Fin;"m") ... bien qu'à la rigueur en VBA ça se fait facilement
    - sortir la plage de sortie de l'onget pour le mettre ailleurs OU (mais pas conseillé) avoir la plage de sortie à côté de la plage source (séparée d'une ou plusieurs colonnes vides)

  3. #3
    Membre éclairé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2013
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 220
    Par défaut
    Bonjour Joe,

    Merci beaucoup d'avoir répondu !

    En prévision d'une création "manuelle", j'avais déjà fait tout ce que tu as dit ! J'avais calculé mon nombre de mois avec Datedif pour chaque enregistrement et je comptais inserer les lignes nécessaires à la main (par groupe de 10 ou 20 tout de même ! ).... Donc voici un exemple du tableau de départ :

    Nom : Image1.JPG
Affichages : 457
Taille : 60,8 Ko

    La macro pourrait envoyer les données sur un autre onglet, ça ne me dérange pas. Le résultat devrait ressembler à ceci (avec toutes les autres "Références" l'une à la suite de l'autre) :

    Nom : Image2.JPG
Affichages : 416
Taille : 44,4 Ko

    Je bricole légèrement en VBA et ce cas-là est trop compliqué pour moi malheureusement.

    Encore merci !

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un truc dans ce genre ? A adapter aux besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Sub Test()
     
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim Cel As Range
        Dim DateDebut As Date
        Dim DateFin As Date
        Dim NBMois As Long
        Dim Lgn As Long
     
        'défini la plage en feuille "Feuil1" sur la colonne A à partir de A2
        With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        'feuille qui va recevoir le tableau
        Set Fe = Worksheets("Feuil2")
     
        'entêtes
        Fe.Range("A1:B1").Value = Array("Références", "Dates")
     
        'ligne de début
        Lgn = 2
     
        For Each Cel In Plage
     
            'calcul du nombre de mois
            DateDebut = Cel.Offset(, 1).Value
            DateFin = Cel.Offset(, 2).Value
            NBMois = DateDiff("m", DateDebut, DateFin, vbMonday)
     
            With Fe
     
                'inscrit la référence en cours
                .Range(.Cells(Lgn, 1), .Cells(NBMois + Lgn - 1, 1)).Value = Cel.Value
     
                'inscrit les deux première dates de la série
                .Cells(Lgn, 2).Value = DateDebut
                .Cells(Lgn + 1, 2).Value = DateSerial(Year(DateDebut), Month(DateDebut) + 1, Day(DateDebut))
     
                'tire vers le bas
                .Range(.Cells(Lgn, 2), .Cells(Lgn + 1, 2)).AutoFill .Range(.Cells(Lgn, 2), .Cells(NBMois + Lgn - 1, 2))
     
                'pour la référence suivante
                Lgn = Lgn + NBMois
     
            End With
     
        Next Cel
     
    End Sub

  5. #5
    Membre éclairé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2013
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 220
    Par défaut
    Bonjour Theze !

    D'abord merci pour la réponse !

    Mais avec une semaine de dingue, je n'avais pas pu tester le code jusqu'à aujourd'hui...

    Alors j'ai un tableau test de 5 lignes en tout, dont la première donnée est bien en A2 (Référence1 en l'occurrence).

    J'obtiens le message suivant lorsque j'essaye de rouler la macro : L'indice n'appartient pas à la sélection. VBA ne pointe vers aucune ligne du code. D'où ça vient ?

    Merci encore !

Discussions similaires

  1. [XL-2010] Nombre de mois dans une fourchette de dates selon plusieurs conditions
    Par Accessifiante dans le forum Excel
    Réponses: 4
    Dernier message: 18/12/2015, 19h06
  2. Macro pour convertir une fourchette de dates en plusieurs lignes
    Par Legumesmiam dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2015, 11h28
  3. [XL-2007] Problème dans une macro pour ajouter une date
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2015, 21h28
  4. [XL-2010] Créer une macro pour convertir un flux XML en doc XLS
    Par LePuzzl3 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/10/2014, 12h44
  5. difficultés pour convertir une string en date
    Par p1xl_01 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 07/06/2011, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo