Comparaison VBA

jeanBaptiste

XLDnaute Junior
Bonjour le forum,

Encore une fois je me tourne vers vous car on m'a donné de nouvelle indication pour ma mission de stage mais je bloque sur un point. Je m'explique j'ai importé deux tableaux et je les ai copié dans un grand pour les comparer. Chaque tableau contient 5 colonnes "OF", "Phase", "Date de départ", "Date de fin" et la dernière pour vérifié leur présence de chaque coté.
Pour l'exemple je vais appelé "OF"+"Phase" -> ValeurA et ValeurB pour chaque tableau et la "Date de fin" -> DateA et DateB

Donc voila les 4 cas que je dois sortir

-Si ValeurA = ValeurB ET DateA >= DateB j'écris dans les lignes correspondante (sur la ligne de ValeurA et la ligne de Valeur B) "oui"
-Si ValeurA = ValeurB ET DateA < DateB j'écris dans les lignes correspondante "retard"
-Si il y a une ValeurA mais n'existe pas dans le deuxième tableau écrire que dans la 5ème colonne du premier tableau en face de la ValeurA "pas fait"
-Si il y a une ValeurB mais n'existe pas dans le premier tableau écrire que dans la 5ème colonne du deuxième tableau en face de la ValeurB "pas prévu"

Petit exemple :

OFPhaseDate débutDate finTache réaliséeOFPhaseDate débutDate finTache prévue
2532130.0023/06/201524/06/2015oui2532330.0024/06/201525/06/2015retard
2532230.0023/06/201524/06/2015oui2532130.0023/06/201524/06/2015oui
2532330.0023/06/201524/06/2015retard2532230.0024/06/201523/06/2015oui
2532430.0023/06/201524/06/2015pas fait2532530.0024/06/201524/06/2015pas prévu
et voila le code que j'ai actuellement qui ne fait que les cas "oui" et "retard"

VB:
 Dim maPlage As Range
Dim DernLigne As Long

DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Set maPlage = Range("A1:Z" & DernLigne)
Dim VALEURA As String, VALEURB As String
Dim DATEA As Date, DATEB As Date
DATEA = Format(DateSerial(Year(Date), Month(Date), Day(Date)), "dd/mm/yyyy")
DATEB = Format(DateSerial(Year(Date), Month(Date), Day(Date)), "dd/mm/yyyy")

For i = 3 To DernLigne
    VALEURA = Range("A" & i).Value + Range("B" & i).Value
    DATEA = Range("D" & i).Value2
    
    For j = 3 To DernLigne
        VALEURB = Range("G" & j).Value + Range("H" & j).Value
        DATEB = Range("J" & j).Value2
    
    If VALEURA = VALEURB And DATEB <= DATEA Then
        Range("E" & i).Value = "oui"
        Range("K" & j).Value = "oui"
    End If
    
    If VALEURA = VALEURB And DATEB > DATEA Then
        Range("E" & i).Value = "retard"
        Range("K" & j).Value = "retard"
    End If
    Next j
Next i

En espérent avoir été assez claire, je reste à votre disposition si je me suis mal expliqué

Cordialement

jeanBaptiste
 

vgendron

XLDnaute Barbatruc
Re : Comparaison VBA

Hello

ce code à adapter à ton fichier
Code:
Sub test()
 Dim maPlage As Range
Dim DernLigne As Long

DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Set maPlage = Range("A1:Z" & DernLigne)
Dim VALEURA As String, VALEURB As String
Dim DATEA As Date, DATEB As Date
DATEA = Format(DateSerial(Year(Date), Month(Date), Day(Date)), "dd/mm/yyyy")
DATEB = Format(DateSerial(Year(Date), Month(Date), Day(Date)), "dd/mm/yyyy")

For i = 3 To DernLigne
    VALEURA = Range("A" & i).Value + Range("B" & i).Value
    DATEA = Range("D" & i).Value2
    
    trouve = False
    For j = 3 To DernLigne
        If trouve = False Then
            VALEURB = Range("G" & j).Value + Range("H" & j).Value
            DATEB = Range("J" & j).Value2
    
            If VALEURA = VALEURB And DATEB <= DATEA Then
                Range("E" & i).Value = "oui"
                Range("K" & j).Value = "oui"
                trouve = True
           
            ElseIf VALEURA = VALEURB And DATEB > DATEA Then
                Range("E" & i).Value = "retard"
                Range("K" & j).Value = "retard"
                trouve = True
            End If
        End If
    Next j
    If trouve = False Then Range("E" & i).Value = "pas fait"
Next i

For j = 3 To DernLigne
        If Range("K" & j) = "" Then Range("K" & j) = "Pas prévu"
Next j
End Sub
 

job75

XLDnaute Barbatruc
Re : Comparaison VBA

Bonjour jeanBaptiste, vgendron,

Une solution qui entre des formules en colonnes E et K :

Code:
Sub comparaison()
With [E3].Resize(Application.Match(9 ^ 9, [D:D]) - 2)
  .FormulaR1C1 = "=IF(COUNTIFS(C7,RC1,C8,RC2,C10,""<=""&RC4),""oui"",IF(COUNTIFS(C7,RC1,C8,RC2,C10,"">""&RC4),""retard"",""pas fait""))"
  .Value = .Value 'facultatif, supprime les formules
End With
With [K3].Resize(Application.Match(9 ^ 9, [J:J]) - 2)
  .FormulaR1C1 = "=IF(COUNTIFS(C1,RC7,C2,RC8,C4,"">=""&RC10),""oui"",IF(COUNTIFS(C1,RC7,C2,RC8,C4,""<""&RC10),""retard"",""pas prévu""))"
  .Value = .Value 'facultatif, supprime les formules
End With
End Sub
Sur Excel 2007 et versions suivantes on peut en effet utiliser COUNTIFS (NB.SI.ENS).

A+
 

Statistiques des forums

Discussions
312 211
Messages
2 086 291
Membres
103 171
dernier inscrit
clemm