Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 :

[table="width: 500, class: grid, align: center"]
[tr]
[td]OF[/td]
[td]Phase[/td]
[td]Date début[/td]
[td]Date fin[/td]
[td]Tache réalisée[/td]
[td][/td]
[td]OF[/td]
[td]Phase[/td]
[td]Date début[/td]
[td]Date fin[/td]
[td]Tache prévue[/td]
[/tr]
[tr]
[td]25321[/td]
[td]30.00[/td]
[td]23/06/2015[/td]
[td]24/06/2015[/td]
[td]oui[/td]
[td][/td]
[td]25323[/td]
[td]30.00[/td]
[td]24/06/2015[/td]
[td]25/06/2015[/td]
[td]retard[/td]
[/tr]
[tr]
[td]25322[/td]
[td]30.00[/td]
[td]23/06/2015[/td]
[td]24/06/2015[/td]
[td]oui[/td]
[td][/td]
[td]25321[/td]
[td]30.00[/td]
[td]23/06/2015[/td]
[td]24/06/2015[/td]
[td]oui[/td]
[/tr]
[tr]
[td]25323[/td]
[td]30.00[/td]
[td]23/06/2015[/td]
[td]24/06/2015[/td]
[td]retard[/td]
[td][/td]
[td]25322[/td]
[td]30.00[/td]
[td]24/06/2015[/td]
[td]23/06/2015[/td]
[td]oui[/td]
[/tr]
[tr]
[td]25324[/td]
[td]30.00[/td]
[td]23/06/2015[/td]
[td]24/06/2015[/td]
[td]pas fait[/td]
[td][/td]
[td]25325[/td]
[td]30.00[/td]
[td]24/06/2015[/td]
[td]24/06/2015[/td]
[td]pas prévu[/td]
[/tr]
[/table]
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
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
539
Réponses
1
Affichages
685
Réponses
3
Affichages
951
Réponses
68
Affichages
8 K
Réponses
1
Affichages
2 K
Retour