Création Nouvelle Colonne Dédupliquée

Bonjour,

J'aimerais savoir si quelqu'un aurait une solution/macro pour créer une colonne qui déduplique une base de données sur 2 colonnes.

Je m'explique :

  • J'ai en colonne A un heure de début en hh:mm:ss
  • En colonne B une durée en secondes
  • J'aimerais créer une nouvelle colonne qui créée autant de lignes que de secondes (si heure de début 8:00:00 et durée 2 secondes, j'aimerais avoir 2 lignes 8:00:00 et 8:00:01).

Voir fichier ci-joint pour exemple.

Merci beaucoup !

AM

Bonjour,

dans ton exemple sur le fichier, tu as 08:36:49 et en colonne B tu as 00:00:02.

Si j'ai bien compris on devrait donc avoir 08:36:49 et 08:36:50 et c'est tout.

Or dans ta "colonne créée" on a aussi 08:36:51. Est-ce normal ou une erreur ?

C'est une erreur effectivement

Il y a une seconde de trop (ou pas assez dans la colonne B)

Ok, du coup voici un fichier à tester avec une macro :

Bonjour le fil, bonjour le forum,

Une autre proposition :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Sheet1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
O.Range("E1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
K = 1 'initialise la variable K
For I = 2 To UBound(TV, 1) 'boucle 1 : sur les lignes I du tableau des valeurs TV (en partant de la seconde)
    For J = 0 To Second(TV(I, 2)) - 1 'boucle 2 : de 0 au nombre de secondes en TV(I,2), moins 1 seconde
        ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
        'récupère l'heure plus J secondes dans la ligne K de TL
        TL(K) = TimeSerial(Hour(TV(I, 1)), Minute(TV(I, 1)), Second(TV(I, 1)) + J)
        K = K + 1 'incrémente K (ajoute un e ligne au tableau des lignes TL)
    Next J 'prochaine seconde de la boucle 2
Next I 'prochaine ligne de la boucle 1
Range("E2").Resize(UBound(TL), 1).Value = Application.Transpose(TL) 'renvoie dans E2 redimensionnée le tableau TL transposé
End Sub

Merci beaucoup à vous.

Ca a l'air de bien fonctionner.

Je réalise cependant que j'ai oublié de préciser que des informations dans d'autres colonnes doivent être reportées sur cette nouvelle base dédupliquée (voir ci-joint).

Savez-vous ajuster votre code avec ces nouveaux éléments ?

Désolé pour cet oubli et merci beaucoup pour votre aide !

Arthur

Nouveau fichier à essayer

Merci.

J'ai légèrement ajusté en rajoutant une colonne.

Cela semble fonctionner jusqu'à la ligne 1236 où une erreur s'affiche et la macro s'arrête.

Sauriez-vous pourquoi ?

Merci

2macro.xlsm (61.11 Ko)

Bonjour, ça plante en réalité à partir de la ligne 1020, car on a 00:01:02 en colonne B.

Je n'avais pas prévu le cas ou des minutes seraient renseignées, je vais voir ce que je peux faire

Voilà, tu peux changer le code de la macro par le suivant :

Sub melch()

Application.ScreenUpdating = False

    derligA = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To derligA
        duree = Cells(i, 2) * 60 * 60 * 24
        For j = 0 To (duree - 1)
            derligI = Cells(Rows.Count, 9).End(xlUp).Row + 1
            Cells(derligI, 8) = i
            Cells(derligI, 9) = Format(Cells(i, 1).Value + (j / 24 / 60 / 60), "hh:mm:ss")
            Cells(derligI, 10) = Cells(i, 3)
            Cells(derligI, 11) = Cells(i, 4)
            Cells(derligI, 12) = Cells(i, 5)
        Next
    Next
End Sub

Merci beaucoup

Rechercher des sujets similaires à "creation nouvelle colonne dedupliquee"