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 :

Demande d'aide svp pour corriger mon script [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut Demande d'aide svp pour corriger mon script
    Bonjour,

    Je sollicite votre aide pour corriger mon script (boucle dans le vide j'ai l'impression).

    Je join un exemple de ce que je souhaite faire (fichier developpez.xlsx)

    j'essaye d'executer mon script mais j'ai l'impression qu'il boucle dans le vide je ne comprend pas le probleme.

    Je sollicite votre aide pour corriger mon code, Je vous joins donc ma macro direct (script.xlsm dans script.zip)

    Pour resumer, j'ai 3 colonnes "Date/Time" et a chaque colonne correspond une colonne "Pression". Donc 3 colonnes "Date/Time" et 3 colonnes "Pression".

    Evidement les 3 colonnes "Date/Time" ne sont pas identiques. Mon but est de merger ces 3 colonnes pour avoir finalement une seule colonne "Date/Time" tout en gardant les 3 colonnes "Pression" correspondant cette fois a une seule colonne "Date/Time". (Dans le cas de NON VALEUR de pression pour une date donnée, je metterai N/A par exemple)


    Merci encore pour les pro pour votre aide et efficacité





    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour developpeur82,

    Je veux bien t'aider.

    Ci dessous mes modifs :
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    Sub macro_pour_developpeur82()
     
    Dim cpt_col_A As Integer, cpt_col_C As Integer, cpt_col_E As Integer
    Dim i As Integer ' variable qui incrémente le numéro de ligne
    Dim maxi As Integer 'nombre de ligne contenant de cellule non vide de la colonne la plus grande
    Dim VarA As Date, VarC As Date, VarE As Date 'variables temporaires pour stockage des dates
     
     
    cpt_col_A = Sheets("Data & Results").Range("a65536").End(xlUp).Row
    cpt_col_C = Sheets("Data & Results").Range("c65536").End(xlUp).Row
    cpt_col_E = Sheets("Data & Results").Range("e65536").End(xlUp).Row
     
    ' on détermine quelle est la colonne la plus grande -  car on boucle sur la plus grande
    If cpt_col_A >= cpt_col_C Then
        If cpt_col_A >= cpt_col_E Then
            maxi = cpt_col_A
        Else
            maxi = cpt_col_E
        End If
    Else
        If cpt_col_C >= cpt_col_E Then
            maxi = cpt_col_C
        Else
            maxi = cpt_col_E
        End If
    End If
     
    ' la boucle
    For i = 3 To maxi Step 1
        With Sheets("Data & Results")
     
            VarA = .Range("A" & i).Value
            VarC = .Range("C" & i).Value
            VarE = .Range("E" & i).Value
     
            'E = A & A = C
            If VarA = VarC And VarC = VarE Then
                'Date
                .Range("H" & i).Value = VarA
                'Pressure
                .Range("I" & i).Value = .Range("B" & i).Value
                .Range("J" & i).Value = .Range("D" & i).Value
                .Range("k" & i).Value = .Range("F" & i).Value
     
            Else
     
                'A <= C <= E
                If VarA <= VarC And VarC <= VarE Then
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = C & C =! E
                    If VarA = VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
                    End If
                    'A != C
                    If VarA <> VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
                    End If
                End If
     
                'A <= E <= C
                If VarA <= VarE And VarE <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = E & E =! C
                    If VarA = VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                    'A != E
                    If VarA <> VarE And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
                    End If
                End If
     
                'E <= A <= C
                If VarE <= VarA And VarA <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = A & A =! C
                    If VarE = VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                    'E != A
                    If VarE <> VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                End If
     
                'C <= A <= E
                If VarC <= VarA And VarA <= VarE Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = A & A =! E
                    If VarC = VarA And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
                    End If
                    'C != A
                    If VarC <> VarA And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
                    End If
                End If
     
                'E <= C <= A
                If VarE <= VarC And VarC <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = C & C =! A
                    If VarE = VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                    'A != E
                    If VarE <> VarC And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                End If
     
                'C <= E <= A
                If VarC <= VarE And VarE <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = E & E =! A
                    If VarC = VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = .Range("F" & i).Value
                    End If
                    'E != A
                    If VarC <> VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
                    End If
                End If
            End If
        End With
    Next i
     
     
    End Sub
    Je n'ai pas testé. J'ai corrigé la forme mais pas la conception.

    1. Attention à ta syntaxe : le "&" et le "And" n'ont pas du tout la même signification.

    2. Méfies toi des boucles et conditions imbriquées (fais toi un arbre de décision sur papier avant de programmer)

    Bertrand

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour developpeur82,

    Je te propose ce code (entièrement remanié) :
    Ajoutes deux modules de classe :

    Cdates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Private mPressions As New Collection
    Property Get Pressions() As Collection
      Set Pressions = mPressions
    End Property
    Property Let Pressions(Pressions As Collection)
      Set mPressions = Pressions
    End Property
    et

    cDateRelevé
    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
    Option Explicit
    Private mKey As String                       'Clé d'identification (date)
    Private mP1 As Variant                       'Valeur de P1
    Private mP2 As Variant                       'Valeur de P2
    Private mP3 As Variant                       'Valeur de P3
    Property Get Key() As String
      Key = mKey
    End Property
    Property Let Key(Key As String)
      mKey = Key
    End Property
    Property Get P1() As Variant
      P1 = mP1
    End Property
    Property Let P1(P1 As Variant)
      mP1 = P1
    End Property
    Property Get P2() As Variant
      P2 = mP2
    End Property
    Property Let P2(P2 As Variant)
      mP2 = P2
    End Property
    Property Get P3() As Variant
      P3 = mP3
    End Property
    Property Let P3(P3 As Variant)
      mP3 = P3
    End Property
    et dans le module standard :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    Public Sub FusionnerDates()
    ' Fusionne les 3 tableaux de pression
    Dim Dates As New cDates
    Dim wsh As Worksheet
    Dim rng As Range
    Dim cel As Range
    Dim ctr As Long
    Dim flgTrouvé As Boolean
     
      Set wsh = Worksheets("Data & Results")
      'Effacer les résultats
      With wsh
        .Range(.Cells(3, "H"), .Cells(.Rows.Count, "K")).ClearContents
      End With
     
      'Enregistrer les P1
      With wsh
        Set rng = .Range(.Range("A3"), .Range("A3").End(xlDown))
      End With
      For Each cel In rng.Cells
        Dim DateRelevéP1 As New cDateRelevé
        DateRelevéP1.Key = cel.Value
        flgTrouvé = False
        On Error GoTo ErrorHandler
        flgTrouvé = Not Dates.Pressions(DateRelevéP1.Key) Is Nothing
        On Error GoTo 0
        If Not flgTrouvé Then
          Dates.Pressions.Add DateRelevéP1, DateRelevéP1.Key
          Dates.Pressions(DateRelevéP1.Key).P1 = cel.Offset(, 1).Value
          Dates.Pressions(DateRelevéP1.Key).P2 = "#NA"
          Dates.Pressions(DateRelevéP1.Key).P3 = "#NA"
        End If
        Set DateRelevéP1 = Nothing
      Next cel
     
      'Enregistrer les P2
      With wsh
        Set rng = .Range(.Range("C3"), .Range("C3").End(xlDown))
      End With
      For Each cel In rng.Cells
        Dim DateRelevéP2 As New cDateRelevé
        DateRelevéP2.Key = cel.Value
        flgTrouvé = False
        On Error GoTo ErrorHandler
        flgTrouvé = Not Dates.Pressions(DateRelevéP2.Key) Is Nothing
        On Error GoTo 0
        If Not flgTrouvé Then
          Dates.Pressions.Add DateRelevéP2, DateRelevéP2.Key
          Dates.Pressions(DateRelevéP2.Key).P1 = "#NA"
          Dates.Pressions(DateRelevéP2.Key).P2 = cel.Offset(, 1).Value
          Dates.Pressions(DateRelevéP2.Key).P3 = "#NA"
        Else
          Dates.Pressions(DateRelevéP2.Key).P2 = cel.Offset(, 1).Value
        End If
        Set DateRelevéP2 = Nothing
      Next cel
     
      'Enregistrer les P3
      With wsh
        Set rng = .Range(.Range("E3"), .Range("E3").End(xlDown))
      End With
      For Each cel In rng.Cells
        Dim DateRelevéP3 As New cDateRelevé
        DateRelevéP3.Key = cel.Value
        flgTrouvé = False
        On Error GoTo ErrorHandler
        flgTrouvé = Not Dates.Pressions(DateRelevéP3.Key) Is Nothing
        On Error GoTo 0
        If Not flgTrouvé Then
          Dates.Pressions.Add DateRelevéP3, DateRelevéP3.Key
          Dates.Pressions(DateRelevéP3.Key).P1 = "#NA"
          Dates.Pressions(DateRelevéP3.Key).P2 = "#NA"
          Dates.Pressions(DateRelevéP3.Key).P3 = cel.Offset(, 1).Value
        Else
          Dates.Pressions(DateRelevéP3.Key).P3 = cel.Offset(, 1).Value
        End If
        Set DateRelevéP3 = Nothing
      Next cel
     
      'Mettre à jour la fusion
      Set cel = wsh.Range("H3")
      ctr = 0
      Dim DateRelevé As New cDateRelevé
      For Each DateRelevé In Dates.Pressions
        cel.Offset(ctr).Value = DateRelevé.Key
        cel.Offset(ctr, 1).Value = DateRelevé.P1
        cel.Offset(ctr, 2).Value = DateRelevé.P2
        cel.Offset(ctr, 3).Value = DateRelevé.P3
        ctr = ctr + 1
      Next
     
    Exit Sub
     
    'Gestion d'erreur
    ErrorHandler:
      Select Case Err.Number
        Case 5
          If Err.Description = "Argument ou appel de procédure incorrect" Then
            Resume Next
          Else
            Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
            Resume
          End If
        Case Else
          Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
          Resume
      End Select
     
    End Sub
    J'ai testé, ça fonctionne (voir fichier joint)

    Cordialement
    Patrice
    Fichiers attachés Fichiers attachés

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    Cher Patrice,

    Merci beaucoup pour ce travail enorme, honnetement j'essaye de comprendre puisque je suis loin d'etre un PRO encore! J'ai tourné le script mais il donne le message en snapshot joint. j'ai essayé de deboger mais je n'ai pas reussi... I am still trying (fichier joint Sol_Patrice.JPG)


    Cher Bertrand, merci aussi.. j'ai tourné le resultat est meilleur de ce que j'obtiens moi meme. merci encore. mais je pense qu'il y a un probleme avec la colonne Date le format n'est pas correct. Le resultat n'est pas celui attendu mais au moins ca tourne et ca genere des resultats. (Sol_Bertrand.xlsm)

    Besoin toujours de votre aide svp

    Mille merci a tous encore une fois


    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    L'explication est toute simple : il y a déjà un format de cellule indiqué dans Excel sur la colonne H.

    Pour corriger, il y a plusieurs méthodes :

    1ère solution (manuelle) : tu cliques sur la lettre H au dessus de la colonne. Puis clic bouton droit sur la souris. Puis "Format Cellule". Puis onglet "Nombre". Puis catégorie "Date". Puis tu choisis ton format de date dans la liste "Type". Puis tu valides... Tu verras alors apparaître la date complète.

    2ème solution (code) : tu rajoutes la ligne suivante à la fin de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Data & Results").Columns("H:H").NumberFormat = "dd/mm/yy h:mm;@"
    Bertrand

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    Merci Bertrand,

    Visiblement c'est un probleme algorithmique dans le premier programme avant tout meme avec la commande ci dessus il y a un probleme.

    Par exemple:

    16/08/12 7:14 5298.200 5257.280 5148.130
    16/08/12 7:15 5294.810 5257.850 5153.620
    16/08/12 7:16 5299.460 5255.010 5145.870
    16/08/12 7:17 5295.870 5255.840 N/A
    16/08/12 7:18 5297.250 5255.220 N/A
    16/08/12 7:19 5299.310 5257.030 N/A
    16/08/12 7:20 5298.320 5257.240 N/A
    16/08/12 7:21 5293.790 5258.770 N/A


    A 16/08/12 7:21 P3 n'est pas N/A mais a une valeure..

    Je vais essayé de refaire sur papier comme tu disais pour voir la faille.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut Tri des colonnes dates avec ses pressions correspondantes
    Bonjour Patrice,

    Tu disais que tu as tourné le script et ca marche. j'ai Microsoft Office 2010 et peut etre le script a été codé avec Microsoft Office 2007 ou avant... Est ce que ca a un impact? que faire dans ce cas?

    Pour etre plus precis sur l'erreur voir le code ci dessous:

    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
     
    'Gestion d'erreur
    ErrorHandler:
      Select Case Err.Number
        Case 5
          If Err.Description = "Argument ou appel de procédure incorrect" Then
            Resume Next
          Else
            Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
            Resume
          End If
        Case Else
          Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
          Resume
      End Select
     
    End Sub
    (probleme ligne 9)

    Merci encore

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    Bonjour Bertrand et tous

    j'ai apporté des modi a ton script il a l'air d'etre bon du point de vu algo mais il s'arrete 16/08/12 19:45 et n'affiche rien.. plz could you help? pourquoi il ne continue plus?!


    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
     
    Sub macro_pour_developpeur82()
     
    Dim cpt_col_A As Integer, cpt_col_C As Integer, cpt_col_E As Integer
    Dim i As Integer ' variable qui incrémente le numéro de ligne
    Dim maxi As Integer 'nombre de ligne contenant de cellule non vide de la colonne la plus grande
    Dim VarA As Date, VarC As Date, VarE As Date 'variables temporaires pour stockage des dates
    Dim VarAi As Integer, VarCi As Integer, VarEi As Integer
     
     
    cpt_col_A = Sheets("Data & Results").Range("a65536").End(xlUp).Row
    cpt_col_C = Sheets("Data & Results").Range("c65536").End(xlUp).Row
    cpt_col_E = Sheets("Data & Results").Range("e65536").End(xlUp).Row
     
     
    VarAi = 3
    VarCi = 3
    VarEi = 3
     
    Sheets("Data & Results").Columns("H:H").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("A:A").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("C:C").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("E:E").NumberFormat = "dd/mm/yy h:mm;@"
     
     
     
    ' on détermine quelle est la colonne la plus grande -  car on boucle sur la plus grande
    If cpt_col_A >= cpt_col_C Then
        If cpt_col_A >= cpt_col_E Then
            maxi = cpt_col_A
        Else
            maxi = cpt_col_E
        End If
    Else
        If cpt_col_C >= cpt_col_E Then
            maxi = cpt_col_C
        Else
            maxi = cpt_col_E
        End If
    End If
     
     
    ' la boucle
    For i = 3 To maxi Step 1
     
        With Sheets("Data & Results")
     
            VarA = .Range("A" & VarAi).Value
            VarC = .Range("C" & VarCi).Value
            VarE = .Range("E" & VarEi).Value
     
            'E = A & A = C
            If VarA = VarC And VarC = VarE Then
                'Date
                .Range("H" & VarAi).Value = VarA
                'Pressure
                .Range("I" & i).Value = .Range("B" & VarAi).Value
                .Range("J" & i).Value = .Range("D" & VarCi).Value
                .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                VarAi = VarAi + 1
                VarCi = VarCi + 1
                VarEi = VarEi + 1
     
     
                .Range("l" & i).Value = i
                .Range("m" & i).Value = "cond1"
                .Range("n" & i).Value = maxi
     
     
            ElseIf VarA <= VarC And VarC <= VarE Then
     
                'A <= C <= E
     
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = C & C =! E
                    If VarA = VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond2"
     
     
     
                    'A != C
                    ElseIf VarA <> VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond3"
                    End If
     
     
                'A <= E <= C
                ElseIf VarA <= VarE And VarE <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = E & E =! C
                    If VarA = VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarAi = VarAi + 1
                            VarEi = VarEi + 1
     
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond4"
     
                    'A != E
                    ElseIf VarA <> VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
     
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond5"
                    End If
     
     
                'E <= A <= C
                ElseIf VarE <= VarA And VarA <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = A & A =! C
                    If VarE = VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarAi = VarAi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond6"
     
                    'E != A
                    ElseIf VarE <> VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                             VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond7"
                    End If
     
     
                'C <= A <= E
                ElseIf VarC <= VarA And VarA <= VarE Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = A & A =! E
                    If VarC = VarA And VarA <> VarE Then
     
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond8"
     
                    'C != A
                    ElseIf VarC <> VarA And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond9"
                    End If
     
     
                'E <= C <= A
                ElseIf VarE <= VarC And VarC <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = C & C =! A
                    If VarE = VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarCi = VarCi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond10"
     
                    'A != E
                    ElseIf VarE <> VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond11"
                    End If
     
     
                'C <= E <= A
                ElseIf VarC <= VarE And VarE <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = E & E =! A
                    If VarC = VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarCi = VarCi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond12"
     
                    'E != A
                    ElseIf VarC <> VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond13"
                    End If
                End If
        End With
    Next i
     
     
     
    End Sub

    Merci d'avance
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Tu disais que tu as tourné le script et ca marche.
    Effectivement le code fonctionne sur Excel 2007 et 2003

    j'ai Microsoft Office 2010 et peut etre le script a été codé avec Microsoft Office 2007 ou avant... Est ce que ca a un impact? que faire dans ce cas?
    A ma connaissance il n'y a pas de différence entre 2010 et 2007 qui justifie un problème.

    Pour etre plus precis sur l'erreur voir le code : problème ligne 9
    Quel est le problème ? As-tu un message d'erreur, si oui lequel ?

    Patrice

  10. #10
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par developpeur82 Voir le message
    Bonjour Bertrand et tous

    j'ai apporté des modi a ton script il a l'air d'etre bon du point de vu algo mais il s'arrete 16/08/12 19:45 et n'affiche rien.. plz could you help? pourquoi il ne continue plus?!


    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
     
    Sub macro_pour_developpeur82()
     
    Dim cpt_col_A As Integer, cpt_col_C As Integer, cpt_col_E As Integer
    Dim i As Integer ' variable qui incrémente le numéro de ligne
    Dim maxi As Integer 'nombre de ligne contenant de cellule non vide de la colonne la plus grande
    Dim VarA As Date, VarC As Date, VarE As Date 'variables temporaires pour stockage des dates
    Dim VarAi As Integer, VarCi As Integer, VarEi As Integer
     
     
    cpt_col_A = Sheets("Data & Results").Range("a65536").End(xlUp).Row
    cpt_col_C = Sheets("Data & Results").Range("c65536").End(xlUp).Row
    cpt_col_E = Sheets("Data & Results").Range("e65536").End(xlUp).Row
     
     
    VarAi = 3
    VarCi = 3
    VarEi = 3
     
    Sheets("Data & Results").Columns("H:H").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("A:A").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("C:C").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("E:E").NumberFormat = "dd/mm/yy h:mm;@"
     
     
     
    ' on détermine quelle est la colonne la plus grande -  car on boucle sur la plus grande
    If cpt_col_A >= cpt_col_C Then
        If cpt_col_A >= cpt_col_E Then
            maxi = cpt_col_A
        Else
            maxi = cpt_col_E
        End If
    Else
        If cpt_col_C >= cpt_col_E Then
            maxi = cpt_col_C
        Else
            maxi = cpt_col_E
        End If
    End If
     
     
    ' la boucle
    For i = 3 To maxi Step 1
     
        With Sheets("Data & Results")
     
            VarA = .Range("A" & VarAi).Value
            VarC = .Range("C" & VarCi).Value
            VarE = .Range("E" & VarEi).Value
     
            'E = A & A = C
            If VarA = VarC And VarC = VarE Then
                'Date
                .Range("H" & VarAi).Value = VarA
                'Pressure
                .Range("I" & i).Value = .Range("B" & VarAi).Value
                .Range("J" & i).Value = .Range("D" & VarCi).Value
                .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                VarAi = VarAi + 1
                VarCi = VarCi + 1
                VarEi = VarEi + 1
     
     
                .Range("l" & i).Value = i
                .Range("m" & i).Value = "cond1"
                .Range("n" & i).Value = maxi
     
     
            ElseIf VarA <= VarC And VarC <= VarE Then
     
                'A <= C <= E
     
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = C & C =! E
                    If VarA = VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond2"
     
     
     
                    'A != C
                    ElseIf VarA <> VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond3"
                    End If
     
     
                'A <= E <= C
                ElseIf VarA <= VarE And VarE <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = E & E =! C
                    If VarA = VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarAi = VarAi + 1
                            VarEi = VarEi + 1
     
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond4"
     
                    'A != E
                    ElseIf VarA <> VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
     
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond5"
                    End If
     
     
                'E <= A <= C
                ElseIf VarE <= VarA And VarA <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = A & A =! C
                    If VarE = VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarAi = VarAi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond6"
     
                    'E != A
                    ElseIf VarE <> VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                             VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond7"
                    End If
     
     
                'C <= A <= E
                ElseIf VarC <= VarA And VarA <= VarE Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = A & A =! E
                    If VarC = VarA And VarA <> VarE Then
     
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & VarAi).Value
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarAi = VarAi + 1
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond8"
     
                    'C != A
                    ElseIf VarC <> VarA And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond9"
                    End If
     
     
                'E <= C <= A
                ElseIf VarE <= VarC And VarC <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = C & C =! A
                    If VarE = VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarCi = VarCi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond10"
     
                    'A != E
                    ElseIf VarE <> VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond11"
                    End If
     
     
                'C <= E <= A
                ElseIf VarC <= VarE And VarE <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = E & E =! A
                    If VarC = VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = .Range("F" & VarEi).Value
     
                            VarCi = VarCi + 1
                            VarEi = VarEi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond12"
     
                    'E != A
                    ElseIf VarC <> VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & VarCi).Value
                            .Range("k" & i).Value = "N/A"
     
                            VarCi = VarCi + 1
     
                            .Range("l" & i).Value = i
                            .Range("m" & i).Value = "cond13"
                    End If
                End If
        End With
    Next i
     
     
     
    End Sub

    Merci d'avance
    Autant te dire que tes modifs sont étranges et sans doute fausses...

    1. Premièrement,

    Pourquoi mettre :

    Alors que i s'incrémente automatiquement dans la boucle

    Au passage tu rajoutes des variables qui augmentent la confusion (VarEi, VarAi, VarCi). En plus, elles ne sont pas commentées...

    2. Deuxièmement,

    Une colonne vide donne 00:00:00 donc sera toujours plus faible que les autres dates... Donc il ne fournira pas le résultat que tu attends, même après les correctifs que j'ai effectués :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    Sub macro_pour_developpeur82()
     
    Dim cpt_col_A As Integer, cpt_col_C As Integer, cpt_col_E As Integer
    Dim i As Integer ' variable qui incrémente le numéro de ligne
    Dim maxi As Integer 'nombre de ligne contenant de cellule non vide de la colonne la plus grande
    Dim VarA As Date, VarC As Date, VarE As Date 'variables temporaires pour stockage des dates
     
     
    cpt_col_A = Sheets("Data & Results").Range("a65536").End(xlUp).Row
    cpt_col_C = Sheets("Data & Results").Range("c65536").End(xlUp).Row
    cpt_col_E = Sheets("Data & Results").Range("e65536").End(xlUp).Row
     
     
    Sheets("Data & Results").Columns("H:H").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("A:A").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("C:C").NumberFormat = "dd/mm/yy h:mm;@"
    Sheets("Data & Results").Columns("E:E").NumberFormat = "dd/mm/yy h:mm;@"
     
     
     
    ' on détermine quelle est la colonne la plus grande -  car on boucle sur la plus grande
    If cpt_col_A >= cpt_col_C Then
        If cpt_col_A >= cpt_col_E Then
            maxi = cpt_col_A
        Else
            maxi = cpt_col_E
        End If
    Else
        If cpt_col_C >= cpt_col_E Then
            maxi = cpt_col_C
        Else
            maxi = cpt_col_E
        End If
    End If
     
     
    ' la boucle
    For i = 663 To maxi Step 1
     
        With Sheets("Data & Results")
     
            VarA = .Range("A" & i).Value
            VarC = .Range("C" & i).Value
            VarE = .Range("E" & i).Value
     
            'E = A & A = C
            If VarA = VarC And VarC = VarE Then
                'Date
                .Range("H" & i).Value = VarA
                'Pressure
                .Range("I" & i).Value = .Range("B" & i).Value
                .Range("J" & i).Value = .Range("D" & i).Value
                .Range("k" & i).Value = .Range("F" & i).Value
     
     
     
            ElseIf VarA <= VarC And VarC <= VarE Then
     
                'A <= C <= E
     
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = C & C =! E
                    If VarA = VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
     
     
     
     
                    'A != C
                    ElseIf VarA <> VarC And VarC <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                    End If
     
     
                'A <= E <= C
                ElseIf VarA <= VarE And VarE <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarA
                    'A = E & E =! C
                    If VarA = VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
     
     
                    'A != E
                    ElseIf VarA <> VarE And VarE <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = "N/A"
     
                    End If
     
     
                'E <= A <= C
                ElseIf VarE <= VarA And VarA <= VarC Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = A & A =! C
                    If VarE = VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
     
     
                    'E != A
                    ElseIf VarE <> VarA And VarA <> VarC Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
     
                    End If
     
     
                'C <= A <= E
                ElseIf VarC <= VarA And VarA <= VarE Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = A & A =! E
                    If VarC = VarA And VarA <> VarE Then
     
                            'Pressure
                            .Range("I" & i).Value = .Range("B" & i).Value
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
     
                    'C != A
                    ElseIf VarC <> VarA And VarA <> VarE Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
     
     
                    End If
     
     
                'E <= C <= A
                ElseIf VarE <= VarC And VarC <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarE
                    'E = C & C =! A
                    If VarE = VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = .Range("F" & i).Value
     
     
                    'A != E
                    ElseIf VarE <> VarC And VarC <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = "N/A"
                            .Range("k" & i).Value = .Range("F" & i).Value
     
                    End If
     
     
                'C <= E <= A
                ElseIf VarC <= VarE And VarE <= VarA Then
                    'Date
                    .Range("H" & i).Value = VarC
                    'C = E & E =! A
                    If VarC = VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = .Range("F" & i).Value
     
     
                    'E != A
                    ElseIf VarC <> VarE And VarE <> VarA Then
                            'Pressure
                            .Range("I" & i).Value = "N/A"
                            .Range("J" & i).Value = .Range("D" & i).Value
                            .Range("k" & i).Value = "N/A"
     
                    End If
                End If
        End With
    Next i
     
     
     
    End Sub
    Bref, je te conseilles de reprendre les tutos/formations sur les bases de la programmation, voir même de raisonner qu'en algorithme avant de coder sous VBA.

    Bertrand

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    Bonjour Patrice,

    Merci pour ta reponse. Oui en effet je ne comprend pas pourquoi ca tourne chez toi et pas sur mon ordi


    je joins le message d'erreur j'espere que ca t'aidera.

    Merci encore pour ton aide
    Images attachées Images attachées  

  12. #12
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour developpeur82,

    Effectivement, je vois que tu utilises une version anglaise d'Excel alors que j’utilise des versions Françaises

    Normalement le problème devrait disparaitre en remplaçant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Err.Description = "Argument ou appel de procédure incorrect" Then
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Err.Description = "Invalid procedure call or argument" Then
    Patrice

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    Merci beaucoup Patrice maintenant ca marche!! et j'obtiens des resultats. mais pourquoi la derniere date affichée est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    20/08/12 01:54:00 	#NA	#NA	4899.020
    alors que normalement elle doit etre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    21/08/12 06:00:00 	245.130    #NA    #NA

    qui appartient a la date "P1" (A3116)

  14. #14
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Tout simplement parce que les dates ne sont pas triées dans l'ordre.

    Pour cela il suffit d'ajouter juste avant le Exit Sub final situé avant la gestion d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      'Trier par date
      Set rng = wsh.Range(cel, cel.End(xlDown).End(xlToRight))
      rng.Sort Key1:=cel, Order1:=xlAscending, Header:=xlNo
    Toutes les modifications sont dans le fichier joint.

    Cordialement
    Patrice
    Fichiers attachés Fichiers attachés

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 171
    Points : 80
    Points
    80
    Par défaut
    AWESOME Patrice!! Mille Merci pour ton aide........








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

Discussions similaires

  1. Avis Mcd + de l'aide svp pour mon PFE
    Par link25000 dans le forum Modélisation
    Réponses: 3
    Dernier message: 24/06/2011, 17h59
  2. demande de conseil pour optimiser mon script
    Par seb.garcia dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 11/05/2011, 16h03
  3. De l'aide svp pour rédiger mon CV
    Par Sylvain_063 dans le forum Word
    Réponses: 2
    Dernier message: 25/03/2010, 08h53
  4. [FLASH 8]demande d'aide SVP pour un debutant
    Par kheiro7 dans le forum Flash
    Réponses: 2
    Dernier message: 16/02/2007, 11h13
  5. [AJAX] Finalisation de mon site
    Par belvina dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/01/2006, 01h54

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