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 :

Transformation d'une serie en plusieures series [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut Transformation d'une serie en plusieures series
    Bonjour
    Je suis nul en macro excel
    je bloque sur une macro que je voudrait rendre plus souple
    a la base elle verfie que la valeur n+1 est inferieur ou egale a la valeur n
    on meme temp elle me donne la date de la valeur initial pour chaque serie .
    Se que je voudrait qu'elle accepte ces que cette condition peut ne pas etre verfier pour n+1 ou n+2 mais quelle verifie pour n+3
    on meme temp que la macro me donne la date de debut et la date de fin de la serie .
    j'espere que j'ai ete explicite .
    merci d'avance.

    J'ai oublier d'ajouter le fichier avec la macro
    Pièce jointe 99098

  2. #2
    Expert éminent 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
    Par défaut
    Bonjour et bienvenu au forum
    Malheureusement ni l'explication, ni le style utilisé n'est compréhensible.

    Essaies de reformuler ta question en un français clair par rapport à ton fichier

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut
    Excuser mon langage approximatif
    Voici la macro comment elle calcul
    V (i) =>V (i+1) on stock v (i) dans une nouvelle colonne

    Chaque fois que ces vérifier elle stocke le V i ça me donne des séries de donner à partir d’une série total avec pour chaque nouvelle série la date de départ.

    Maintenant je veux que si la condition V i=>V i+1 ne soit pas vérifiée elle vérifie encore pour i+2 et i+3

    Donc sa consiste a vérifier

    Si V (i) => V ( i+1) si non
    Si V (i+1) => V( i+2) si non
    Si V (i+2) => V( i+3) si non on arête

    On plus je voudrais qu’elle me donne
    La date Pour de la valeur initial donc i=1 et la date final pour i =n


    merci d'avance encore une fois

  4. #4
    Expert éminent 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
    Par défaut
    C'est toujours pas clair, néanmoins, regarde ce premier 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
    Sub Test()
    Dim LastLig As Long, i As Long, j As Long, n As Long
    Dim Tb, Res()
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Tb = .Range("A1:B" & LastLig)
     
        Do
            i = i + 1
            If Tb(i, 2) >= Tb(i + 1, 2) Then
                j = j + 1
                n = 0
                ReDim Preserve Res(1 To 2, 1 To j)
                Res(1, j) = Tb(i, 1)
                Res(2, j) = Tb(i, 2)
            Else
                n = n + 1
            End If
        Loop While i < LastLig - 1 And n < 3
     
        .Range("E1").Resize(j, 2) = Application.Transpose(Res)
    End With
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut
    Merci pour le code je les utiliser mais il ne créer que une seule série
    ma macro transforme les colonne source en une série de colonne
    cordialement

    Le problème ces que le code n'ecremente pas il s'arete a la 1er serie
    alors que je devrait avoir une serie de colone dans les valeur sont decroissante
    merci encore

  6. #6
    Expert éminent 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
    Par défaut
    Une question mal formulée recevra des réponses hasardeuses.
    Je continu dans la devinette, ci-après autre code.

    Attention à la limité d'Excel 2003 (maximum 256 colonnes)

    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
    Sub Test()
    Dim LastLig As Long, i As Long, j As Long, n As Long
    Dim Fin As Boolean
    Dim Tb, Res()
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Tb = .Range("A1:B" & LastLig)
        Do
            i = i + 1
            If Tb(i, 2) >= Tb(i + 1, 2) Then
                j = j + 1
                ReDim Preserve Res(1 To 2, 1 To j)
                Res(1, j) = Tb(i, 1)
                Res(2, j) = Tb(i, 2)
                Fin = False
            Else
                Fin = True
            End If
            If Fin And j >= 3 Then
                .Range("E1").Offset(0, n).Resize(j, 2) = Application.Transpose(Res)
                j = 0
                n = n + 2
                ReDim Res(1 To 2, 1 To 1)
            End If
        Loop While i < LastLig - 1 And n < 251         'la condition sur n pour ne pas dépasser 256 colonnes disponible sur excel 2003 vu le grand nombre de données
     
    End With
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut Petit poucet
    Merci pour ton indulgence
    Mais toujours est-il que la macro s’arrête a n+1 alors que je voudrait que elle s'arrête a n+3
    Si la condition n'est pas vérifier pour le premier rang on la vérifie quand même pour le deuxième et si non pour troisième.

    si V (n) < V (n+1)
    alors on vérifie que V (n+1) => V (n+2) si non
    on vérifie que V (n+2) => V (n+3)

    Merci d'avance

  8. #8
    Expert éminent 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
    Par défaut
    Tu peux mettre sur ton fichier le résultat escompté?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut Merci
    Voici le fichier avec les resultats atendu, les celule en rouge ces se qui va devoire changer par rapport au code que vous mavait envoyer .
    sa voudrait dire que sa remonte mais pas trop .
    Merci pour l'efort que vous faite.

  10. #10
    Expert éminent 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
    Par défaut
    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
    Sub Test3()
    Dim LastLig As Long, i As Long, j As Long, n As Long
    Dim Fin As Boolean
    Dim Tb, Res()
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Tb = .Range("A1:B" & LastLig)
        .Range("E1").CurrentRegion.Clear
        Do
            i = i + 1
            Fin = False
            If Tb(i, 2) < Tb(i + 1, 2) And Tb(i, 2) < Tb(i + 2, 2) And Tb(i, 2) < Tb(i + 3, 2) Then Fin = True
            If Not Fin Then
                j = j + 1
                ReDim Preserve Res(1 To 2, 1 To j)
                Res(1, j) = Tb(i, 1)
                Res(2, j) = Tb(i, 2)
            Else
                If j > 0 Then
                    .Range("E1").Offset(0, n).Resize(j, 2) = Application.Transpose(Res)
                    j = 0
                    n = n + 2
                    Erase Res
                End If
            End If
        Loop While i < LastLig - 3 And n < 251       'la condition sur n pour ne pas dépasser 256 colonnes disponible sur excel 2003 vu le grand nombre de données
     
    End With
    End Sub

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut
    Je te remercie pour la macro voici comment j'ai changer juste un petite critere
    maintenat j'ai un probleme elle afiche comme valeur de depart des valeur inferieure a celle d'apres
    je te renvois le fichier avec ta macro dedans les celule en rouge ne devrait pas etre stocker (ou aparaitre).
    merci pour ton aide.

    Le fichier na pas ete charger trop d'espace

  12. #12
    Expert éminent 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
    Par défaut
    Et tu sais pourquoi tu as changé la condition?
    Le code tel que donné ne répond pas à la demande conformément à ton fichier exemple initial?

    Ce que j'avais compris c'est d'extraire les sous séries qui répondent à 2 critères:
    1. Séries décroissantes
    2. Tolérer un maximum 3 points singuliers successifs (où la série n'est pas décroissante)

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut
    Ces se que je demande mais il me donne des valeur initial qui ne sont pas le maximum de la serie

    Voici le fichier avec les résultats de la macro les cellule en rouge sont plus grande que se qui devait être prévue
    Rq: Pourquoi la macro ma changer le format de date en assayant de le changer il remet le même format .
    merci pour ton aide .
    cordialement .
    Fichiers attachés Fichiers attachés

  14. #14
    Expert éminent 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
    Par défaut
    Tu as les séries suivantes (3ème série par exemple)
    1.79 1.8 1.8 1.79 1.79 1.78 1.78 1.78 c'est normal, les 1.8 sont considérés comme des points singuliers.

    Pour gérer le problème des dates
    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
    Sub Test4()
    Dim LastLig As Long, i As Long, j As Long, n As Long
    Dim Fin As Boolean
    Dim Tb, Res()
     
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Tb = .Range("A2:B" & LastLig)
        .Range("E1").CurrentRegion.Clear
        Do
            i = i + 1
            Fin = False
            If Tb(i, 2) < Tb(i + 1, 2) And Tb(i, 2) < Tb(i + 2, 2) And Tb(i, 2) < Tb(i + 3, 2) Then Fin = True
            If Not Fin Then
                j = j + 1
                ReDim Preserve Res(1 To 2, 1 To j)
                Res(1, j) = CDbl(Tb(i, 1))
                Res(2, j) = Tb(i, 2)
            Else
                If j > 0 Then
                    With .Range("E1").Offset(0, n)
                        .Resize(j, 2) = Application.Transpose(Res)
                        .Resize(j, 1).NumberFormat = "dd/mm/yyyy hh:mm"
                    End With
                    j = 0
                    n = n + 2
                    Erase Res
                End If
            End If
        Loop While i < LastLig - 4 And n < 251         'la condition sur n pour ne pas dépasser 256 colonnes disponible sur excel 2003 vu le grand nombre de données
    End With
    End Sub

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Par défaut Merci
    Je vais retirer par un trie les valeur aberrante.je te remercie pour ton aide.
    cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformation d'un dataframe en Time Series
    Par maximedv dans le forum R
    Réponses: 2
    Dernier message: 10/07/2013, 15h53
  2. Masquer une ou plusieurs series dans un graphique en vba
    Par evx136 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/08/2011, 15h49
  3. [Oracle 10.2g] Transformer une ligne en plusieurs
    Par madevilts dans le forum SQL
    Réponses: 3
    Dernier message: 20/02/2009, 10h48
  4. acquerir une trame nmea rs232(serie)>PIC
    Par strygolw dans le forum C
    Réponses: 7
    Dernier message: 06/05/2007, 14h17
  5. probleme avec une carte pci port serie(netmos 9835)
    Par chiroke dans le forum Composants
    Réponses: 1
    Dernier message: 03/05/2006, 13h01

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