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 :

Insertion automatique des lignes des dates manquantes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    financier
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Insertion automatique des lignes des dates manquantes
    Bonjour,

    j'ai un problème que je n'arrive à résoudre, en faite j'ai une base de données composée de deux colonnes une colonnes dates et une colonne prix
    la date des colonnes ne concerne que les prix des jours ouvrables c'est à dire du Lundi au Vendredi
    sauf qu'il manque les lignes de certaines dates

    Voici le fichier excel sur lequel je travail http://cjoint.com/?CDfnHPQECQ8

    ==> je souhaite avoir un code VB qui me permet d'insérer les lignes des dates manquantes et d'y insérer dans la colonne prix, le prix (j-1)

    merci

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Valable pour la version Excel 2007 et suivante
    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
    Option Explicit
     
    Sub Remplissage()
    Dim LastLig As Long, i As Long, j As Long, k As Long, m As Long
    Dim n As Integer
    Dim Tb, Res()
     
    Application.ScreenUpdating = False
    With Worksheets("MaFeuille")                       'A adapter
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A2:B" & LastLig)
     
        ReDim Res(1 To 2, 1 To 1)
        Res(1, 1) = CLng(Tb(1, 1))
        Res(2, 1) = Tb(1, 2)
        j = 1
        For i = 2 To LastLig - 1
            n = Diff(Tb, i)
            m = j + n
            ReDim Preserve Res(1 To 2, 1 To m)
            For k = j + 1 To m
                Res(1, k) = Suiv(Res(1, k - 1))
                Res(2, k) = IIf(n = 1 Or k = m, Tb(i, 2), Tb(i - 1, 2))
            Next k
            j = m
        Next i
        With .Range("D2")
            .Resize(j, 2) = Application.Transpose(Res)
            .Resize(j, 1).NumberFormat = "dd/mm/yyyy"
        End With
    End With
    End Sub
     
    Private Function Diff(ByVal T, ByVal d As Long) As Byte
    Dim Dte As Long, Der As Long
     
    Der = CLng(T(d - 1, 1))
    Dte = CLng(T(d, 1))
     
    Diff = Evaluate("=NETWORKDAYS(" & Der & "," & Dte & ")") - 1
    End Function
     
    Private Function Suiv(ByVal Dte As Long) As Long
     
    Suiv = Evaluate("=WORKDAY(" & Dte & ",1)")
    End Function

  3. #3
    Membre à l'essai
    Homme Profil pro
    financier
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Erreur
    bonjour et merci pour votre réponse, mais quand j'ai appliqué ce code j'ai eu cette erreur d'éxecution '6' Dépassement de capacité au niveau de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function Diff(ByVal T, ByVal d As Long) As Byte
    Dim Dte As Long, Der As Long
     
    Der = CLng(T(d - 1, 1))
    Dte = CLng(T(d, 1))
     
    ****Diff = Evaluate("=NETWORKDAYS(" & Der & "," & Dte & ")") - 1***
    End Function
    voici le document surlequel je travail : http://cjoint.com/?CDiosKpPr2C

    merci

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le code proposé fonctionne si les dates initiales sont triées par ordre croissant

  5. #5
    Membre à l'essai
    Homme Profil pro
    financier
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Salut
    voici la colonne des dates :

    20/03/2011
    18/03/2011
    16/03/2011
    14/03/2011
    12/03/2011
    11/03/2011
    10/03/2011
    08/03/2011

    dois je faire une manipulation sur c dates ?

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Fais un tri préalable de tes plages de données pour que les dates soient en ordre croissant.

    Tu peux faire ceci aussi par code. je te laisse le soin de t'y pencher.

  7. #7
    Membre à l'essai
    Homme Profil pro
    financier
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Bonjour
    Bonjour mercatog

    peut être que je me trompe monsieur mais l colonne des dates sur on fichier excel est bien ordonnée par ordre croissant, je ne sais pas, que dois je faire pour faire marcher le code

  8. #8
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour, Si le fichier joint correspond au fichiers reel, les dates sont classé par ordre decroissant, il faut donc inverser le sens de cette liste.

Discussions similaires

  1. [XL-2007] Ajuster automatiquement la hauteur des lignes
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2013, 17h01
  2. Insertion automatique de ligne
    Par binouse18 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2007, 17h27
  3. insertion automatique de lignes dans la crontab
    Par Mr_Brown dans le forum Administration système
    Réponses: 2
    Dernier message: 27/03/2007, 14h03
  4. Réponses: 12
    Dernier message: 01/03/2007, 16h48
  5. Exportation d'une partie des données des lignes, ...
    Par Pho dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/06/2005, 10h30

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