Création liste à partir de donnée live

6test.xlsx (9.44 Ko)
version Bonjour,

J'aimerai résoudre un petit problème sur l'un de mes fichier excels.
J'ai isolé le cas dans un doc que j'ai link . Pour ma version, je vais aussi link un screen car je ne suis pas vraiment sur de celle-ci .
Je vous remercie d'avance de prendre le temps de me lire ^^

Alors voilà le problème à résoudre :

J'ai sur une feuille une données se mettant à jour quasiment toutes les secondes.
Ainsi sur la feuille 2, j'aimerais créer un historique de cette donnée avec pour seules informations . L'heure et la valeur de chaque changement.

Donc voilà si vous pouviez m'aiguiller sur comment résoudre ce problème je vous en serez vraiment reconnaissant .
Et pensez vous qu'il y aurait un moment ou le document Excel pour un peut être surchargé et buggé ?
Je prévois à terme de dupliquer ce système 5 à 10 fois sur le même document vous me conseillerez de déplacer les historiques régulièrement dans un autre document pour garder de la fluidité ?

Voila j'espère que j'ai été assez clair dans mes explications et m'excuse si ce n'est pas le cas.

bonjour

désolé , je ne suis pas "moderne"

4khopo.xlsx (9.04 Ko)

Bonjour ,

Déjà un grand merci d'avoir pris le temps de répondre.

Après avoir regarder je pense mettre peut être mal exprimer .

Enfaite sur la cellule E4 de la page 1 arriveront les données en live et ensuite sur la page2(historiq) créer une liste à l'instar de l'exemple présenté .

Sachant que je n'ai jamais programmer en Excel pensez vous que cette manip est complexe et que je pourrais la réaliser moi même rapidement (bien sur selon le temps que je consacrerait à cette apprentissage).

Salut Khopo,
Salut Tulipe_4,

une solution VBA...
- je lis que tu comptes dupliquer le système donc j'ai imaginé que les données à lister dans l'historique DOIVENT être précédées de l'indication "Data" pour être reconnues :
Data1, Data2, Data3,...
- les infos s'inscrivent dans 'Historiq' : date du jour, heure et valeur lors du changement de valeur ;

Private Sub Worksheet_Change(ByVal Target As Range)
'
If InStr(Target.Offset(0, -1), "Data") = 1 Then
    With Worksheets("Historiq")
        On Error Resume Next
        '
        Set rCel = .Cells.Find(what:=Target.Offset(0, -1), lookat:=xlWhole, LookIn:=xlValues)
        If Not rCel Is Nothing Then
            iCol = rCel.Column
            iRow = .Columns(iCol).Find(what:=Date, lookat:=xlWhole, LookIn:=xlFormulas).Row
            If iRow = 0 Then _
                iRow = .Cells(Rows.Count, iCol + 2).End(xlUp).Row + 1: _
                .Cells(iRow, iCol) = Date
            iRow = .Cells(Rows.Count, iCol + 2).End(xlUp).Row + 1
            .Cells(iRow, iCol + 1) = Now
            .Cells(iRow, iCol + 2) = Target
        End If
        '
        On Error GoTo 0
    End With
End If
'
End Sub

En supposant une mise à jour des valeurs 2 X par minute, sauf erreur et si tu disposes de 1.000.000 de lignes (Excel 2010 ??), tu peux stocker +- 1 an de données par colonne.
Quant à savoir si cela va ralentir le fichier et dans quelles proportions, ... tu nous raconteras !

6khopo.xlsm (17.29 Ko)


A+

C'est parfait!

Je te remercie vraiment , je vais essayer de décortiquer le code pour comprendre comment tout sa marche.

Mais un grand merci tu m'as fait gagner pas mal de temps .

Bonne chance pour ton jeux Chess-Like .

Salut Khopo,

version améliorée...

- la variable lgRow as Long est plus adaptée ;
- les colonnes "Data" sont créées automatiquement dans 'Historiq' lorsque nécessaire !
- la macro détecte les valeurs non-conformes (texte, vide) et... ne fait rien ;
- idem avec un message si, d'aventure, la macro détecte une colonne complète (+ 1.000.000 de valeurs)

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim rCel As Range, lgRow&, iCol%
'
If InStr(Target.Offset(0, -1), "Data") = 1 And IsNumeric(Target) And Target <> "" Then
    With Worksheets("Historiq")
        On Error Resume Next
        '
        Set rCel = .Rows(1).Find(what:=Target.Offset(0, -1), lookat:=xlWhole, LookIn:=xlValues)
        If rCel Is Nothing Then _
            Set rCel = .Range("A1").Offset(0, .Cells(1, Columns.Count).End(xlToLeft).Column + 3): _
            .Range("A1:C2").Copy Destination:=rCel: _
            rCel = Target.Offset(0, -1): _
            .Columns(rCel.Column).NumberFormat = "dd/mm/dyy": _
            .Columns(rCel.Column + 1).NumberFormat = "hh:mm:ss"
        '
        iCol = rCel.Column
        If .Cells(Rows.Count, iCol + 2).End(xlUp).Row < Rows.Count Then
            lgRow = .Columns(iCol).Find(what:=Date, lookat:=xlWhole, LookIn:=xlFormulas).Row
            If lgRow = 0 Then _
                lgRow = .Cells(Rows.Count, iCol + 2).End(xlUp).Row + 1: _
                .Cells(lgRow, iCol) = Date
            lgRow = .Cells(Rows.Count, iCol + 2).End(xlUp).Row + 1
            .Cells(lgRow, iCol + 1) = Now
            .Cells(lgRow, iCol + 2) = Target
        Else
            MsgBox "Cette colonne de valeurs est complète !", vbInformation + vbOKOnly
        End If
        '
        On Error GoTo 0
    End With
End If
'
End Sub

Á tester... jusqu'à la 1.000.000e ligne, svp !

Merci pour tes bons voeux envers Curulis Quest !
Avec ce Covid, ce n'est pas demain que je pourrai à nouveau l'exposer en festival...

7khopo.xlsm (19.72 Ko)


A+

Oh je te remercie encore du coup ^^ .

La 1.000.000e ligne est encore loin , espérons que les festival reprennent avant que l'atteigne

Rechercher des sujets similaires à "creation liste partir donnee live"