XL 2016 Création d'un code VBA pour insérer un des dates

c_brt

XLDnaute Nouveau
Bonjour a tous,

J'ai un tableau de données avec une date de début et une date de fin. Le but est de crée un code VBA qui va permettre d'insérer une colonne pour chaque jours entre ces deux dates.
C'est tout a fait faisable a la main mais quand il y a plus de 70 000 lignes c'est un peu compliqué...
J'espère que c'est un petit peu claire.

Je vous remercie pour l'aide apporté.

Bonne journée a tous!
 
Solution
Bonjour
Classeur joint "paramétrable"
Cerise sur le gâteau: les colonnes s'étendent ou se réduisent automatiquement .

Indiquez le nom de votre tableau en début de code .
Option Explicit
Const Tableau As String = "Tableau1" ' <-- là

Les modifs se font au fur et à mesure des saisies ou de changement de valeurs dans les colonnes que vous avez citées : Date_Deb_Cp et Date_Fin_Cp

Pour provoquer les changements immédiatement dans votre existant sans avoir à faire entrée sur chaque cellule, exécutez manuellement la procédure MajJours

fanch55

XLDnaute Barbatruc
Bonjour,
J'ai un tableau de données avec une date de début et une date de fin.
Comment se présentent ces données ?
Le but est de crée un code VBA qui va permettre d'insérer une colonne pour chaque jours entre ces deux dates.
Dans la même feuille, pour les lignes suivantes ?
C'est tout a fait faisable a la main mais quand il y a plus de 70 000 lignes c'est un peu compliqué...
Ce sont des colonnes ou des lignes ?

Un classeur exemple serait le bienvenu pour lever toute ambiguïté
 

c_brt

XLDnaute Nouveau
Bonjour, voilà ce que je souhaite obtenir, je ne peux malheureusement pas vous mettre le fichier en copie puisque c'est confidentiel, une ligne correspond à un patient.
La date de début et en Y et le date de fin en Z.
1646647045311.png
 

fanch55

XLDnaute Barbatruc
Oki,
En dupliquant la feuille qui ne semble pas confidentielle dans un nouveau classeur et en effaçant ce qui pourrait être cependant confi dans les colonnes avant AT,
Pourriez-vous joindre celui-ci ? car je ne vois pas de Y ou de Z ...
 

fanch55

XLDnaute Barbatruc
Oki,
Donc, ce que vous voulez c'est que le tableau soit Dynamique, c'est à dire que des colonnes (jours virtuels) se rajoutent automatiquement selon le nombre de jour entre Y et Z et qu'on y mette pour la ligne concernée les dates intermédiaires ?
On ne fait que rajouter, pas supprimer ...
C'est parti ...
 

patricktoulon

XLDnaute Barbatruc
Bonjour @c_brt @fanch55
il y a beaucoup plus simple en fait
je commente le code
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a&, i&, c As Date
    If Intersect(Target, Range("tableau1").Resize(, 3)) Is Nothing Then Exit Sub

    With Range("tableau1[#all]")    'on prend le tableau avec son entete
        For i = 2 To .Rows.Count    ' on démarre donc a la ligne 2
            a = 0    'initialise la variable a à zero a chaque ligne
            Deb = .Cells(i, 2): Fin = .Cells(i, 3)    'on récupère les dates
            If .Cells(i, 4) = "" Then 'on ne fait la ligne que si!!! elle n'a pas été faite
                For c = Deb To Fin    'boucle de date  à  date2
                    'on ajoute apres le tableau les jours  de l’intervalle en incrémentant (a) pour l'offset
                    a = a + 1: .Cells(i, 3 + a) = c: .Cells(1, 3 + a) = "jour" & a
                Next
            End If
        Next
 'POUR INFO !!!      
 'écrire dans une cellule a coté d'un tableau structuré a por effet de l'agrandir  jusqu'a cette cellule
        'conclusion le tableau s'agrandi tout seul
    End With
End Sub

avec cette méthode on évite ainsi de devoir tester si le tableau est dimensionné ou pas et /ou si il a déjà été dimensionné avec un intervalle de date plus important dans les lignes précédentes
comme @fanch55 a proposé dans le dans l'event change ,je met une condition si la ligne a été faite ou pas
autrement dit le changement n’opère uniquement sur les lignes qui n'ont pas été faites
en gros on se comporte comme si les colonnes existent déjà
demonstration
demo3.gif

Voilà
;)
 

Discussions similaires

Statistiques des forums

Discussions
299 845
Messages
1 979 511
Membres
206 755
dernier inscrit
So78310