11/08 à 18:51Bonjour,
Voici la procédure modifiée afin de faire apparaître le résultat voulu dans la colonne A à F commme il devrait être et effacer le contenu de AA à AF.
J'ai simplement ajouter 2 lignes à la fin.
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 2008-07-24 par St-Gelais Jacques
'
'
Range("H1").Formula = "=COUNTA(C[-7]:C[-7])"
Range("I1").Formula = "=COUNTA(C[-6]:C[-6])"
Range("K1").Formula = "=COUNTA(C[-7]:C[-7])"
Range("L1").Formula = "=COUNTA(C[-6]:C[-6])"
Range("J1").Formula = "=MAX(RC[-1],RC[2])"
valeurA = Range("H1").Value 'NBVAL(A:A)
valeurD = Range("K1").Value 'NBVAL(D:D)
valeur = valeurA + valeurD 'soit le maximum possiblement
A = "A"
C = "C"
D = "D"
F = "F"
AA = "AA"
AC = "AC"
AD = "AD"
AF = "AF"
If UCase(Left(Range("A1").Value, 4)) = "DATE" Then
entête = 2
Range(AA & "1:" & AF & "1").Value = Range(A & "1:" & F & "1").Value
Else
entête = 1
End If
ligne = entête
ligneA = ligne
ligneD = ligne
PetiteLigne = ligne
compteur = ligne
'Je fais une copie de sécurité avant tout
Columns("BA:BF").Value = Columns("A:F").Value
'Je classe les 3 première et les 3 autres.
Columns("A:C").Select
Selection.Sort Key1:=Range("A" & entête), Order1:=xlAscending, Key2:=Range("C" & entête) _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Columns("D:F").Select
Selection.Sort Key1:=Range("D" & entête), Order1:=xlAscending, Key2:=Range("F" & entête) _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
While compteur <= valeur
DateA = Range(A & ligne).Value
NomC = Range(C & ligne).Value
DateD = Range(D & ligne).Value
NomF = Range(F & ligne).Value
If DateD <> "" And DateA = "" Then
Range(AD & PetiteLigne & ":" & AF & PetiteLigne).Value = Range(D & ligne & ":" & F & ligne).Value
Range(D & ligne & ":" & F & valeur).Value = Range(D & ligne + 1 & ":" & F & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
End If
If DateD = "" And DateA <> "" Then
Range(AA & PetiteLigne & ":" & AC & PetiteLigne).Value = Range(A & ligne & ":" & C & ligne).Value
Range(A & ligne & ":" & C & valeur).Value = Range(A & ligne + 1 & ":" & C & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
End If
'Si la date dans D est inférieur à A, je transfère tout simplement D à F et
'j'écrase D à F par la suite des données
While DateD < DateA And DateD <> ""
Range(AD & PetiteLigne & ":" & AF & PetiteLigne).Value = Range(D & ligne & ":" & F & ligne).Value
Range(D & ligne & ":" & F & valeur).Value = Range(D & ligne + 1 & ":" & F & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
DateD = Range(D & ligne).Value
compteur = compteur + 1
Wend
'Prochaine étape = les dates identiques
DateA = Range(A & ligne).Value
NomC = Range(C & ligne).Value
DateD = Range(D & ligne).Value
NomF = Range(F & ligne).Value
If DateD = DateA And NomF = NomC And NomF <> "" Then
Range(AA & PetiteLigne & ":" & AC & PetiteLigne).Value = Range(A & ligne & ":" & C & ligne).Value
Range(AD & PetiteLigne & ":" & AF & PetiteLigne).Value = Range(D & ligne & ":" & F & ligne).Value
Range(D & ligne & ":" & F & valeur).Value = Range(D & ligne + 1 & ":" & F & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
Range(A & ligne & ":" & C & valeur).Value = Range(A & ligne + 1 & ":" & C & valeur + 1).Value
End If
If DateD = DateA And NomF <> NomC And NomF <> "" Then
Range(AD & PetiteLigne & ":" & AF & PetiteLigne).Value = Range(D & ligne & ":" & F & ligne).Value
Range(D & ligne & ":" & F & valeur).Value = Range(D & ligne + 1 & ":" & F & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
End If
'Si la date dans D est supérieur à A, je transfère tout simplement A à C et
'j'écrase A à C par la suite des données
If DateD > DateA And DateA <> "" And DateD <> "" Then
Range(AA & PetiteLigne & ":" & AC & PetiteLigne).Value = Range(A & ligne & ":" & C & ligne).Value
Range(A & ligne & ":" & C & valeur).Value = Range(A & ligne + 1 & ":" & C & valeur + 1).Value
PetiteLigne = PetiteLigne + 1
DateD = Range(D & ligne).Value
End If
compteur = compteur + 1
Wend
Columns("A:F").Value = Columns("AA:AF").Value
Columns("AA:AF").ClearContents
Range("A1").Select
End Sub
----------
Singe laid