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

Excel Discussion :

Extraire des données dans un tableau


Sujet :

Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut Extraire des données dans un tableau
    Bonjour,

    J'ai plusieurs capteurs de températures qui collectent tout au long de l'année dans divers secteurs de culture maraichère les températures tous les 1/4 d'heures.

    J'aurais besoin d'extraire début janvier les valeurs minimales et maximale de chaque journée de l'année 2019 afin de les rassembler dans un seul tableau excel et ce pour chaque colonne (capteur) et chaque ligne (heure)

    Exemple
    Colonne C - le 10 novembre la température mini est à la ligne 21892 donc il faut que je conserve cette ligne
    idem pour le maxi ligne 21*960

    Il faut aussi que je conserve la ligne 21 904 qui correspond au mini de la colonne D et bien entendu le maxi de cette même colonne qui se trouver sur la ligne 21*970...

    Et ainsi de suite pour tous les jours de toute l'année pour 4 colonnes

    Comment faire?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Comme vous ne précisez pas la version d'excel que vous avez, voici une proposition en VBA. Avec une version plus récente que la mienne (2007), on doit pouvoir utiliser Power Qwery.
    On peut essayer aussi avec un TCD.

    Le code
    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
    51
    52
    53
    Sub recup_T°()
        Dim T1_Min As Double, T2_Min As Double, T3_Min As Double, T4_Min As Double
        Dim T1_Max As Double, T2_Max As Double, T3_Max As Double, T4_Max As Double
        Dim H_T1_Min As Double, H_T2_Min As Double, H_T3_Min As Double, H_T4_Min As Double
        Dim H_T1_Max As Double, H_T2_Max As Double, H_T3_Max As Double, H_T4_Max As Double
        Dim i As Long
        Dim Jour As Date
     
        Application.ScreenUpdating = False
     
        LigDeb = 2 'égale à 23h45 du 1er janvier
        LigFin = 97 'égale à 23h45 du 1er janvier
        Lig = 3 'ligne de récupération des valeurs
        Annee = Year([A2]) 'relevé de l'année testée
        If Annee Mod 4 = 0 Then NbJ = 366 Else NbJ = 365
        Range("J3:Z368").ClearContents 'Effacement du tableau de synthèse
     
        For i = 1 To NbJ Step 96
            Jour = Cells(LigDeb, "A")
            T1_Min = Application.WorksheetFunction.Min(Range("C" & LigDeb & ":C" & LigFin))
            Set T1_mini = Range("C" & LigDeb & ":C" & LigFin).Find(Application.WorksheetFunction.Min(Range("C" & LigDeb & ":C" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T1_Min = Cells(T1_mini.Row, "B")
            T1_Max = Application.WorksheetFunction.Max(Range("C" & LigDeb & ":C" & LigFin))
            Set T1_maxi = Range("C" & LigDeb & ":C" & LigFin).Find(Application.WorksheetFunction.Max(Range("C" & LigDeb & ":C" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T1_Max = Cells(T1_maxi.Row, "B")
     
            T2_Min = Application.WorksheetFunction.Min(Range("D" & LigDeb & ":D" & LigFin))
            Set T2_mini = Range("D" & LigDeb & ":D" & LigFin).Find(Application.WorksheetFunction.Min(Range("D" & LigDeb & ":D" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T2_Min = Cells(T2_mini.Row, "B")
            T2_Max = Application.WorksheetFunction.Max(Range("D" & LigDeb & ":D" & LigFin))
            Set T2_maxi = Range("D" & LigDeb & ":D" & LigFin).Find(Application.WorksheetFunction.Max(Range("D" & LigDeb & ":D" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T2_Max = Cells(T2_maxi.Row, "B")
     
            T3_Min = Application.WorksheetFunction.Min(Range("E" & LigDeb & ":E" & LigFin))
            Set T3_mini = Range("E" & LigDeb & ":E" & LigFin).Find(Application.WorksheetFunction.Min(Range("E" & LigDeb & ":E" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T3_Min = Cells(T3_mini.Row, "B")
            T3_Max = Application.WorksheetFunction.Max(Range("E" & LigDeb & ":E" & LigFin))
            Set T3_maxi = Range("E" & LigDeb & ":E" & LigFin).Find(Application.WorksheetFunction.Max(Range("E" & LigDeb & ":E" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T3_Max = Cells(T3_maxi.Row, "B")
     
            T4_Min = Application.WorksheetFunction.Min(Range("F" & LigDeb & ":F" & LigFin))
            Set T4_mini = Range("F" & LigDeb & ":F" & LigFin).Find(Application.WorksheetFunction.Min(Range("F" & LigDeb & ":F" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T4_Min = Cells(T4_mini.Row, "B")
            T4_Max = Application.WorksheetFunction.Max(Range("F" & LigDeb & ":F" & LigFin))
            Set T4_maxi = Range("F" & LigDeb & ":F" & LigFin).Find(Application.WorksheetFunction.Max(Range("F" & LigDeb & ":F" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T4_Max = Cells(T4_maxi.Row, "B")
     
            Range(Cells(Lig, "J"), Cells(Lig, "Z")).Value = Array(Jour, T1_Min, H_T1_Min, T1_Max, H_T1_Max, T2_Min, H_T2_Min, T2_Max, H_T2_Max, T3_Min, H_T3_Min, T3_Max, H_T3_Max, T4_Min, H_T4_Min, T4_Max, H_T4_Max)
            Lig = Lig + 1
            LigDeb = LigDeb + 96
            LigFin = LigFin + 96
        Next i
    End Sub
    Le fichier en exemple, il ne reste qu'à cliquer sur le bouton
    Pièce jointe 516419

    Cdlt

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 409
    Points : 16 250
    Points
    16 250
    Par défaut
    Bonjour

    A priori très simple à faire par TCD ou mieux par PowerQuery.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Salut

    Merci pour les réponses

    Effectivement j'ai oublié de préciser la version, c'est la 2003

    Voici une image du tableau : dans un premier temps seul l'extraction de la colonne C m'intéresse (on va y aller mollo)





    En revanche s'il est possible de me donner un peu la main...

    Car bien qu'utilisateur quotidien d'Excel les TCD et Power Querry pour moi c'est du chinois...

    Idem pour le code j'en fais quoi exactement

    Merciiiii

    (bon et puis faut que je vois aussi pourquoi je reçois pas les notifications)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Comme vous ne précisez pas la version d'excel que vous avez, voici une proposition en VBA. Avec une version plus récente que la mienne (2007), on doit pouvoir utiliser Power Qwery.
    On peut essayer aussi avec un TCD.

    Le code
    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
    51
    52
    53
    Sub recup_T°()
        Dim T1_Min As Double, T2_Min As Double, T3_Min As Double, T4_Min As Double
        Dim T1_Max As Double, T2_Max As Double, T3_Max As Double, T4_Max As Double
        Dim H_T1_Min As Double, H_T2_Min As Double, H_T3_Min As Double, H_T4_Min As Double
        Dim H_T1_Max As Double, H_T2_Max As Double, H_T3_Max As Double, H_T4_Max As Double
        Dim i As Long
        Dim Jour As Date
     
        Application.ScreenUpdating = False
     
        LigDeb = 2 'égale à 23h45 du 1er janvier
        LigFin = 97 'égale à 23h45 du 1er janvier
        Lig = 3 'ligne de récupération des valeurs
        Annee = Year([A2]) 'relevé de l'année testée
        If Annee Mod 4 = 0 Then NbJ = 366 Else NbJ = 365
        Range("J3:Z368").ClearContents 'Effacement du tableau de synthèse
     
        For i = 1 To NbJ Step 96
            Jour = Cells(LigDeb, "A")
            T1_Min = Application.WorksheetFunction.Min(Range("C" & LigDeb & ":C" & LigFin))
            Set T1_mini = Range("C" & LigDeb & ":C" & LigFin).Find(Application.WorksheetFunction.Min(Range("C" & LigDeb & ":C" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T1_Min = Cells(T1_mini.Row, "B")
            T1_Max = Application.WorksheetFunction.Max(Range("C" & LigDeb & ":C" & LigFin))
            Set T1_maxi = Range("C" & LigDeb & ":C" & LigFin).Find(Application.WorksheetFunction.Max(Range("C" & LigDeb & ":C" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T1_Max = Cells(T1_maxi.Row, "B")
     
            T2_Min = Application.WorksheetFunction.Min(Range("D" & LigDeb & ":D" & LigFin))
            Set T2_mini = Range("D" & LigDeb & ":D" & LigFin).Find(Application.WorksheetFunction.Min(Range("D" & LigDeb & ":D" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T2_Min = Cells(T2_mini.Row, "B")
            T2_Max = Application.WorksheetFunction.Max(Range("D" & LigDeb & ":D" & LigFin))
            Set T2_maxi = Range("D" & LigDeb & ":D" & LigFin).Find(Application.WorksheetFunction.Max(Range("D" & LigDeb & ":D" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T2_Max = Cells(T2_maxi.Row, "B")
     
            T3_Min = Application.WorksheetFunction.Min(Range("E" & LigDeb & ":E" & LigFin))
            Set T3_mini = Range("E" & LigDeb & ":E" & LigFin).Find(Application.WorksheetFunction.Min(Range("E" & LigDeb & ":E" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T3_Min = Cells(T3_mini.Row, "B")
            T3_Max = Application.WorksheetFunction.Max(Range("E" & LigDeb & ":E" & LigFin))
            Set T3_maxi = Range("E" & LigDeb & ":E" & LigFin).Find(Application.WorksheetFunction.Max(Range("E" & LigDeb & ":E" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T3_Max = Cells(T3_maxi.Row, "B")
     
            T4_Min = Application.WorksheetFunction.Min(Range("F" & LigDeb & ":F" & LigFin))
            Set T4_mini = Range("F" & LigDeb & ":F" & LigFin).Find(Application.WorksheetFunction.Min(Range("F" & LigDeb & ":F" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T4_Min = Cells(T4_mini.Row, "B")
            T4_Max = Application.WorksheetFunction.Max(Range("F" & LigDeb & ":F" & LigFin))
            Set T4_maxi = Range("F" & LigDeb & ":F" & LigFin).Find(Application.WorksheetFunction.Max(Range("F" & LigDeb & ":F" & LigFin)), LookIn:=xlValues, lookat:=xlWhole)
            H_T4_Max = Cells(T4_maxi.Row, "B")
     
            Range(Cells(Lig, "J"), Cells(Lig, "Z")).Value = Array(Jour, T1_Min, H_T1_Min, T1_Max, H_T1_Max, T2_Min, H_T2_Min, T2_Max, H_T2_Max, T3_Min, H_T3_Min, T3_Max, H_T3_Max, T4_Min, H_T4_Min, T4_Max, H_T4_Max)
            Lig = Lig + 1
            LigDeb = LigDeb + 96
            LigFin = LigFin + 96
        Next i
    End Sub
    Le fichier en exemple, il ne reste qu'à cliquer sur le bouton
    Pièce jointe 516419

    Cdlt
    Bonjour,

    Ouh là tout à l'heure j'ai du louper les dernières lignes car je n'avais pas vu le lien....

    MERCI, je vais bûcher dessus... et vous tiens au courant

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Re bonsoir

    Alors j'ai cliqué sur le lien et la présentation qui s'affiche me parait excellente

    J'ai importé mes données dans le tableau
    Comme les premières données 2019 ne débutaient pas un 1er du mois cela ne fonctionnait pas.
    J'ai regardé le code et j'ai vu que «l'espace» était de 96, j'ai vérifié dans le tableau, c'était ok
    J'ai donc débuté le premier jour (25 mars) en faisant en sorte qu'il ait 96*lignes

    J'ai pu modifier le code pour la prise en compte des affichages des date/heure/température en ligne 3 au lieu de la 2
    C'était nickel



    Cependant l'extraction n'affichait que 4 jours de données

    Là ..........j'ai cherché un sacré moment.... pfff

    Et puis je me suis rendu compte que le 29 et le 30 mars ne comprenaient que... 95 lignes.

    De ce fait le relevé annuel s'arrêtait au 4ème jour qui comprenait 96*lignes soit le 28 mars

    Le 31 mars comprend de nouveau 96 lignes.

    Y aurait-il un autre moyen de paramétrer le saut de jour
    Je m'avance (car je n'y connais rien) ... peut-être en fonction de la date (ou plutôt du changement de date) et non pas en fonction du nombre de ligne de chaque journée?


    D'ores et déjà un immense merci pour ce code initial qui a déjà considérablement fait avancer les choses

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 409
    Points : 16 250
    Points
    16 250
    Par défaut
    Bonjour

    Il serrait 1000 fois plus simple de faire un TCD (Tableau Croisé Dynamique) : quelques clics et cela fonctionne quel que soit le nombre de lignes.

    Placer la date en étiquette de ligne, Extérieur 2 fois en Valeurs, et préciser Min pour le 1er calcul et Max pour le second.

    Mettre préalablement le tableau sous forme de tableau structuré pour tenir compte de l'évolutivité.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Voici le fichier qui tient compte des heures manquantes, voire des jours manquants. J'ai mis des commentaires pour vous aider à la compréhension, ce qui vous permettra de l'adapter plus aisément à la structure de votre propre fichier.
    Pièce jointe 516656

    le code utilisé
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub Recup_T°()
        'Déclaration des variables
        Dim T1_Min As Double, T2_Min As Double, T3_Min As Double, T4_Min As Double
        Dim T1_Max As Double, T2_Max As Double, T3_Max As Double, T4_Max As Double
        Dim H_T1_Min As Double, H_T2_Min As Double, H_T3_Min As Double, H_T4_Min As Double
        Dim H_T1_Max As Double, H_T2_Max As Double, H_T3_Max As Double, H_T4_Max As Double
        Dim i As Long, DerLig As Long, NbJ As Long, LigDeb As Long, LigFin As Long
        Dim Jour As Date
     
        Application.ScreenUpdating = False 'Evite les raffraichissements de l'écran et accélère la vitesse d'exécution
        DerLig = Cells(Rows.Count, "A").End(xlUp).Row 'recherche de la dernière ligne des relevés de température. La recherche se fait sur la colonne A
        LigDeb = 2 'ligne du premier relevé de température
     
        'Marquage par un repère(numéro) en colonne AZ du changement de jour, ceci pour déterminer le nombre(variable) de relevés par jour
        [AZ2] = 1 'on commence avec le N°1
        Range("AZ3:AZ" & DerLig).FormulaR1C1 = "=IF(RC[-51]<>R[-1]C[-51],R[-1]C+1,R[-1]C)" 'formule d'affectation d'un numéro, reproduite jusqu'à la dernière ligne
        Range("AZ3:AZ" & DerLig).Value = Range("AZ3:AZ" & DerLig).Value 'on remplace les formules par les valeurs trouvées
     
        'Nombre de jours de relevés
        NbJ = Application.Max(Range("AZ4:AZ" & DerLig))
     
        Lig = 3 'première ligne de récupération des valeurs du tableau de synthèse
        Range("J3:Z368").ClearContents 'Effacement des précédents résultats dans le tableau de synthèse
     
        For i = 1 To NbJ 'on teste du premier au dernier jour
            Set Prem_Heure = Range("AZ1:AZ" & DerLig).Find(i) 'Détection de la ligne de changement de jour
            LigDeb = Prem_Heure.Row 'On affecte ce N° de ligne à la variable LigDeb
            j = Prem_Heure.Row 'on l'applique aussi à la variable J
            Do While Cells(j + 1, "AZ") = Prem_Heure 'Recherche du dernier relevé du même jour
                j = j + 1 'on scrute toutes les cellules de la colonne AZ jusqu'au changement de valeur
            Loop 'on recommence tant que la valeur trouvée est identique à Prem_Heure
            LigFin = Cells(j, "A").Row 'ligne du dernier relevé
            Jour = Cells(j, "A") 'Relevé de la date du jour traité
     
            'Relevés du premier capteur en colonne C
            T1_Min = Application.Min(Range("C" & LigDeb & ":C" & LigFin)) 'Température min
            Set T1_mini = Range("C" & LigDeb & ":C" & LigFin).Find(T1_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T1_Min = Cells(T1_mini.Row, "B") 'Heure de la température min
            T1_Max = Application.Max(Range("C" & LigDeb & ":C" & LigFin)) 'Température max
            Set T1_maxi = Range("C" & LigDeb & ":C" & LigFin).Find(T1_Max, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T1_Max = Cells(T1_maxi.Row, "B") 'Heure de la température max
     
            'Relevés du deuxième capteur en colonne D
            T2_Min = Application.Min(Range("D" & LigDeb & ":D" & LigFin)) 'Température min
            Set T2_mini = Range("D" & LigDeb & ":D" & LigFin).Find(T2_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T2_Min = Cells(T2_mini.Row, "B") 'Heure de la température min
            T2_Max = Application.Max(Range("D" & LigDeb & ":D" & LigFin)) 'Température max
            Set T2_maxi = Range("D" & LigDeb & ":D" & LigFin).Find(T2_Max, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T2_Max = Cells(T2_maxi.Row, "B") 'Heure de la température max
     
            'Relevés du troisième capteur en colonne E
            T3_Min = Application.Min(Range("E" & LigDeb & ":E" & LigFin)) 'Température min
            Set T3_mini = Range("E" & LigDeb & ":E" & LigFin).Find(T3_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T3_Min = Cells(T3_mini.Row, "B") 'Heure de la température min
            T3_Max = Application.Max(Range("E" & LigDeb & ":E" & LigFin)) 'Température max
            Set T3_maxi = Range("E" & LigDeb & ":E" & LigFin).Find(T3_Max, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T3_Max = Cells(T3_maxi.Row, "B") 'Heure de la température max
     
            'Relevés du quatrième capteur en colonne F
            T4_Min = Application.Min(Range("F" & LigDeb & ":F" & LigFin)) 'Température min
            Set T4_mini = Range("F" & LigDeb & ":F" & LigFin).Find(T4_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T4_Min = Cells(T4_mini.Row, "B") 'Heure de la température min
            T4_Max = Application.Max(Range("F" & LigDeb & ":F" & LigFin)) 'Température max
            Set T4_maxi = Range("F" & LigDeb & ":F" & LigFin).Find(T4_Max, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T4_Max = Cells(T4_maxi.Row, "B") 'Heure de la température max
     
            'Recopie des résultats dans le tableau de synthèse(colonnes de J à Z),  (Jour, T°Min, H_T°min, T°max et H_T°max de chaque capteur))
            Range(Cells(Lig, "J"), Cells(Lig, "Z")).Value = Array(Jour, T1_Min, H_T1_Min, T1_Max, H_T1_Max, T2_Min, H_T2_Min, T2_Max, H_T2_Max, T3_Min, H_T3_Min, T3_Max, H_T3_Max, T4_Min, H_T4_Min, T4_Max, H_T4_Max)
            Lig = Lig + 1 'on passe à la ligne suivante du tableau de synthèse
        Next i
        Columns("AZ").ClearContents 'on efface le contenu de la colonne AZ
    End Sub
    Cdlt

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Salut

    Merci Arturo

    Il semble qu'il y ait encore un chouilla... (erreur 91)





    PS - 83*c'est pour Var?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour

    Il serrait 1000 fois plus simple de faire un TCD (Tableau Croisé Dynamique) : quelques clics et cela fonctionne quel que soit le nombre de lignes.

    Placer la date en étiquette de ligne, Extérieur 2 fois en Valeurs, et préciser Min pour le 1er calcul et Max pour le second.

    Mettre préalablement le tableau sous forme de tableau structuré pour tenir compte de l'évolutivité.

    Ah que j'aimerais comprendre tout ce que tu me racontes....

    Si tu m'avais dit 93 - 5 - 46 - 11 - 35 - 99... etc j'aurais imédiatement su de quoi tu me parlais mais bon chacun ses domaines

    Néanmoins cela ne va pas m'empêcher d'essayer

    Merci

  11. #11
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Envoyé par adrien239
    Il semble qu'il y ait encore un chouilla... (erreur 91)
    Le fichier que j'ai déposé ne crée pas d'erreur, il y a donc un problème que je ne peux voir, pourriez-vous déposer un fichier avec les mêmes relevés qui génèrent l'erreur?

    83 Oui c'est le VAR

    Si vous optez pour la création d'un TCD, il faut y intégrer les heures des min et des max pour chaque capteur.

    Cdlt

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Voici le fichier relevés 2019

    J'ai fait un copier coller des 3 premières colonnes

    Je suis du 04

  13. #13
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Ok, c'est vu, mais avant de vous retourner le fichier, quelles sont les colonnes des 3 autres capteurs?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Alors après plusieurs tests

    Ça marche mais à condition de remplir TOUTES les colonnes de capteurs de manière identique c'est à dire avec le même nombre de ligne.

    Sinon cela s'arrête à la dernière ligne (jour) de la colonne la moins remplie....

    D'où le tableau de l'écran précédent qui s'arrêtait au 7 avril puisque les données des colonnes D, E, F n'étaient remplies que jusqu'à cette date contrairement à la C qui était rempli jusqu'en novembre

    Est-il possible de ne pas être tributaire de cette limitation?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Ok, c'est vu, mais avant de vous retourner le fichier, quelles sont les colonnes des 3 autres capteurs?

    Je n'ai pas compris la question?

  16. #16
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Citation Envoyé par ARTURO83
    Ok, c'est vu, mais avant de vous retourner le fichier, quelles sont les colonnes des 3 autres capteurs?

    Citation Envoyé par adrien239
    Je n'ai pas compris la question?
    Au départ, il était question des relevés de températures de 4 capteurs, le capteur 1 est en colonne C, mais les 3 autres, où sont-ils?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Au départ, il était question des relevés de températures de 4 capteurs, le capteur 1 est en colonne C, mais les 3 autres, où sont-ils?
    Ah ok dans le fichier

    1. extérieur
    2. bio
    3. deux
    4. baignoire

    Mais comme vous pouvez le voir ils ne débutent pas tous au 25 mars

    Et si une série de données du capteur 2 par exemple s'arrête au 15 avril c'est l'ensemble des données qui s'arrêtent d'être collectées au 15 avril

  18. #18
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Voilà le code à recopier dans le module

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Sub Recup_T°()
        'Déclaration des variables
        Dim T1_Min As Double, T2_Min As Double, T3_Min As Double, T4_Min As Double
        Dim T1_Max As Double, T2_Max As Double, T3_Max As Double, T4_Max As Double
        Dim H_T1_Min As Double, H_T2_Min As Double, H_T3_Min As Double, H_T4_Min As Double
        Dim H_T1_Max As Double, H_T2_Max As Double, H_T3_Max As Double, H_T4_Max As Double
        Dim i As Long, DerLig As Long, NbJ As Long, LigDeb As Long, LigFin As Long
        Dim Jour As Date
     
        Application.ScreenUpdating = False 'Evite les raffraichissements de l'écran et accélère la vitesse d'exécution
        DerLig = Cells(Rows.Count, "A").End(xlUp).Row 'recherche de la dernière ligne des relevés de température. La recherche se fait sur la colonne A
        LigDeb = 3 'ligne du premier relevé de température
     
        'Marquage par un repère(numéro) en colonne AZ du changement de jour, ceci pour déterminer le nombre(variable) de relevés par jour
        [AZ3] = 1 'on commence avec le N°1
        Range("AZ4:AZ" & DerLig).FormulaR1C1 = "=IF(RC[-51]<>R[-1]C[-51],R[-1]C+1,R[-1]C)" 'formule d'affectation d'un numéro, reproduite jusqu'à la dernière ligne
        Range("AZ4:AZ" & DerLig).Value = Range("AZ4:AZ" & DerLig).Value 'on remplace les formules par les valeurs trouvées
     
        'Nombre de jours de relevés
        NbJ = Application.Max(Range("AZ4:AZ" & DerLig))
     
        Lig = 3 'première ligne de récupération des valeurs du tableau de synthèse
        Range("J3:Z368").ClearContents 'Effacement des précédents résultats dans le tableau de synthèse
     
        For i = 1 To NbJ 'on teste du premier au dernier jour
            Set Prem_Heure = Range("AZ1:AZ" & DerLig).Find(i) 'Détection de la ligne de changement de jour
            LigDeb = Prem_Heure.Row 'On affecte ce N° de ligne à la variable LigDeb
            j = Prem_Heure.Row 'on l'applique aussi à la variable J
            Do While Cells(j + 2, "AZ") = Prem_Heure 'Recherche du dernier relevé du même jour
                j = j + 1 'on scrute toutes les cellules de la colonne AZ jusqu'au changement de valeur
            Loop 'on recommence tant que la valeur trouvée est identique à Prem_Heure
            LigFin = Cells(j, "A").Row 'ligne du dernier relevé
            Jour = Cells(j, "A") 'Relevé de la date du jour traité
     
    Capteur1:
            'Relevés du premier capteur en colonne C
            T1_Min = Application.Min(Range("C" & LigDeb & ":C" & LigFin)) 'Température min
            Set T1_mini = Range("C" & LigDeb & ":C" & LigFin).Find(T1_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T1_Min = Cells(T1_mini.Row, "B") 'Heure de la température min
            T1_Max = Application.Max(Range("C" & LigDeb & ":C" & LigFin)) 'Température max
            Set T1_maxi = Range("C" & LigDeb & ":C" & LigFin).Find(T1_Max, LookIn:=xlFormulas, lookat:=xlWhole)
            H_T1_Max = Cells(T1_maxi.Row, "B") 'Heure de la température max
     
    Capteur2:
            'Relevés du deuxième capteur en colonne D
            T2_Min = Application.Min(Range("D" & LigDeb & ":D" & LigFin)) 'Température min
            Set T2_Mini = Range("D" & LigDeb & ":D" & LigFin).Find(T2_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            If Not T2_Mini Is Nothing Then
                H_T2_Min = Cells(T2_Mini.Row, "B") 'Heure de la température min
                T2_Max = Application.Max(Range("D" & LigDeb & ":D" & LigFin)) 'Température max
                Set T2_maxi = Range("D" & LigDeb & ":D" & LigFin).Find(T2_Max, LookIn:=xlFormulas, lookat:=xlWhole)
                H_T2_Max = Cells(T2_maxi.Row, "B") 'Heure de la température max
            End If
     
    Capteur3:
            'Relevés du troisième capteur en colonne F
            T3_Min = Application.Min(Range("F" & LigDeb & ":F" & LigFin)) 'Température min
            Set T3_Mini = Range("F" & LigDeb & ":F" & LigFin).Find(T3_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            If Not T3_Mini Is Nothing Then
                H_T3_Min = Cells(T3_Mini.Row, "B") 'Heure de la température min
                T3_Max = Application.Max(Range("F" & LigDeb & ":F" & LigFin)) 'Température max
                Set T3_maxi = Range("F" & LigDeb & ":F" & LigFin).Find(T3_Max, LookIn:=xlFormulas, lookat:=xlWhole)
                H_T3_Max = Cells(T3_maxi.Row, "B") 'Heure de la température max
            End If
     
    Capteur4:
            'Relevés du quatrième capteur en colonne H
            T4_Min = Application.Min(Range("H" & LigDeb & ":H" & LigFin)) 'Température min
            Set T4_Mini = Range("H" & LigDeb & ":H" & LigFin).Find(T4_Min, LookIn:=xlFormulas, lookat:=xlWhole)
            If Not T4_Mini Is Nothing Then
                H_T4_Min = Cells(T4_Mini.Row, "B") 'Heure de la température min
                T4_Max = Application.Max(Range("H" & LigDeb & ":H" & LigFin)) 'Température max
                Set T4_maxi = Range("H" & LigDeb & ":H" & LigFin).Find(T4_Max, LookIn:=xlFormulas, lookat:=xlWhole)
                H_T4_Max = Cells(T4_maxi.Row, "B") 'Heure de la température max
            End If
     
            'Recopie des résultats dans le tableau de synthèse(colonnes de J à Z),  (Jour, T°Min, H_T°min, T°max et H_T°max de chaque capteur))
            Range(Cells(Lig, "J"), Cells(Lig, "Z")).Value = Array(Jour, T1_Min, H_T1_Min, T1_Max, H_T1_Max, T2_Min, H_T2_Min, T2_Max, H_T2_Max, T3_Min, H_T3_Min, T3_Max, H_T3_Max, T4_Min, H_T4_Min, T4_Max, H_T4_Max)
            Lig = Lig + 1 'on passe à la ligne suivante du tableau de synthèse
        Next i
        Columns("AZ").ClearContents 'on efface le contenu de la colonne AZ
    End Sub
    Cdlt

    Edit: Faire ALT + F11 pour accéder au module

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 337
    Points : 364
    Points
    364
    Par défaut
    Merci, c'est de mieux en mieux

    Colonne C s'il n'y a des données QUE dans cette colonne le tableau fonctionne ok
    Colonnes C et D s'il n'y a des données QUE dans ces 2 colonnes le tableau fonctionne ok


    Mais colonnes C D E F sauf erreur ça ne fonctionne pas

    - colonne C début des données 1ère ligne 2 25 mars à 15h48 ok
    - colonne D début des données ligne 1262 7 avril à 20h45 ok
    - colonne E début des données ligne 15800 6 septembre à 10h56.... mais le récap fait démarrer les relevés le 8 avril (j'ai bien vérifié il n'y a pas de donnée à cette date là dans cette colonne E)
    - colonne F début des données ligne 1333 le 8 avril à 14h30... mais là le récap est totalement vide, aucune donnée de mars à novembre

    Cdlt

  20. #20
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 409
    Points : 16 250
    Points
    16 250
    Par défaut
    RE à tous

    Exemple de TCD : cala a pris moins de 2 minutes

    On pourrait de même ajouter sans souci les températures bio, baignoire et cie et les dates se mettraient automatiquement à jour

    En revanche si tu veux les horaires, avec 2003 (16 ans déjà...) il faut ajouter des formules, pas forcément simples

    A partir de 2010, avec PowerQuery, on peut facilement faire sans coder
    Fichiers attachés Fichiers attachés
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. [Conception] Recuperer des données dans un tableau dynamique
    Par Tartanjet dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/09/2006, 00h28
  2. Réponses: 6
    Dernier message: 17/07/2006, 15h07
  3. [MySQL] Formatage des données dans un tableau
    Par dunbar dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2006, 08h52
  4. [MySQL] Stocker des données dans un tableau
    Par LadyArwen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h40
  5. Réponses: 3
    Dernier message: 05/12/2005, 02h30

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