ELSONCe
XLDnaute Junior
Bonjour à tous,
Avec un collègue, nous avons réalisé la macro que vous trouverez ci-dessous, qui fonctionne merveilleusement bien. Cependant, nous savons tous les deux que c'est du "bricolage" . C'est pourquoi je fais appel aux "Grands Excelliens" pour m'aider à allèger et simplifier cette macro... Pour info, le but est de venir copier les informations d'un tableau(1) qui se trouve sur 13 postes différents sous T: pour les coller et les enregistrer sans doublons dans un tableau(2) de sauvegarde toujours sous T:.
Voici notre fameux bricolage :
Sub macro1()
Application.StatusBar = "Collecte des données correspondants en cours..."
Dim cpt As Integer
Dim dec As Integer
Dim gen As Integer
Dim corres As Integer
Dim a, b, c, d, e, f, g, h, i, j, k As String
Dim a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1 As String
Dim ar, br, cr, dr, er, fr, gr, hr, ir, jr, kr As Integer
Dim ResultF As Integer
Dim cpt2 As Integer
cpt = 0
dec = 0
corres = 0
ar = 0
br = 0
cr = 0
dr = 0
er = 0
fr = 0
gr = 0
hr = 0
ir = 0
debut:
dec = 0
cpt = 3
gen = 3
corres = corres + 1
If corres = 14 Then GoTo finprogramme
ChDir "T:\REFABRICATION SAV"
Workbooks.Open Filename:= _
"T:\REFABRICATION SAV\CORRESPONDANTS\Correspondant" & Str(corres) & ".xlsm"
Windows("Correspondant" & Str(corres) & ".xlsm").Activate
cpt = 3
compteur1:
cpt = cpt + 1
If Range("B" & cpt).Value = "" Then GoTo fin:
dec = dec + 1
GoTo compteur1
fin:
If dec = 0 Then GoTo debut:
Sheets("SUIVI SAV").Range("A4", "K" & cpt - 1).Copy
ActiveWorkbook.Close SaveChanges:=True
Windows("SUIVI GLOBAL SAV.xlsm").Activate
gen = 3
general:
gen = gen + 1
If Range("B" & gen).Value = "" Then GoTo fingeneral:
GoTo general
fingeneral:
Range("A" & gen).Select
ActiveSheet.Paste
cpt = 3
gen = 3
GoTo debut
finprogramme:
cpt = 3
boucletri:
cpt = cpt + 1
If Range("B" & cpt).Value = "" Then GoTo debtri:
GoTo boucletri:
debtri:
Range("A4", "I" & cpt - 1).Select
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("B4", "B" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("C4", "C" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("D4", "D" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("E4", "E" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("G4", "G" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("H4", "H" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SAV").Sort
.SetRange Range("A3", "K" & cpt - 1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
fintri:
cpt2 = 3
compteurdoublon:
ar = 0
br = 0
cr = 0
dr = 0
er = 0
fr = 0
gr = 0
hr = 0
ir = 0
cpt2 = cpt2 + 1
If Range("B" & cpt2).Value = "" Then GoTo findoublon:
a = Range("A" & cpt2).Value
a1 = Range("A" & cpt2 + 1).Value
b = Range("B" & cpt2).Value
b1 = Range("B" & cpt2 + 1).Value
c = Range("C" & cpt2).Value
c1 = Range("C" & cpt2 + 1).Value
d = Range("D" & cpt2).Value
d1 = Range("D" & cpt2 + 1).Value
If a = a1 Then ar = 1
If b = b1 Then br = 1
If c = c1 Then cr = 1
If d = d1 Then dr = 1
ResultF = ar + br + cr + dr
If ResultF = 4 Then
Rows(cpt2).Select
Selection.Delete Shift:=xlUp
cpt2 = cpt2 - 1
End If
GoTo compteurdoublon
findoublon:
End Sub
Voilà...
Vous remerciant par avance pour vos propositions.
Cordialement Cédric
Avec un collègue, nous avons réalisé la macro que vous trouverez ci-dessous, qui fonctionne merveilleusement bien. Cependant, nous savons tous les deux que c'est du "bricolage" . C'est pourquoi je fais appel aux "Grands Excelliens" pour m'aider à allèger et simplifier cette macro... Pour info, le but est de venir copier les informations d'un tableau(1) qui se trouve sur 13 postes différents sous T: pour les coller et les enregistrer sans doublons dans un tableau(2) de sauvegarde toujours sous T:.
Voici notre fameux bricolage :
Sub macro1()
Application.StatusBar = "Collecte des données correspondants en cours..."
Dim cpt As Integer
Dim dec As Integer
Dim gen As Integer
Dim corres As Integer
Dim a, b, c, d, e, f, g, h, i, j, k As String
Dim a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1 As String
Dim ar, br, cr, dr, er, fr, gr, hr, ir, jr, kr As Integer
Dim ResultF As Integer
Dim cpt2 As Integer
cpt = 0
dec = 0
corres = 0
ar = 0
br = 0
cr = 0
dr = 0
er = 0
fr = 0
gr = 0
hr = 0
ir = 0
debut:
dec = 0
cpt = 3
gen = 3
corres = corres + 1
If corres = 14 Then GoTo finprogramme
ChDir "T:\REFABRICATION SAV"
Workbooks.Open Filename:= _
"T:\REFABRICATION SAV\CORRESPONDANTS\Correspondant" & Str(corres) & ".xlsm"
Windows("Correspondant" & Str(corres) & ".xlsm").Activate
cpt = 3
compteur1:
cpt = cpt + 1
If Range("B" & cpt).Value = "" Then GoTo fin:
dec = dec + 1
GoTo compteur1
fin:
If dec = 0 Then GoTo debut:
Sheets("SUIVI SAV").Range("A4", "K" & cpt - 1).Copy
ActiveWorkbook.Close SaveChanges:=True
Windows("SUIVI GLOBAL SAV.xlsm").Activate
gen = 3
general:
gen = gen + 1
If Range("B" & gen).Value = "" Then GoTo fingeneral:
GoTo general
fingeneral:
Range("A" & gen).Select
ActiveSheet.Paste
cpt = 3
gen = 3
GoTo debut
finprogramme:
cpt = 3
boucletri:
cpt = cpt + 1
If Range("B" & cpt).Value = "" Then GoTo debtri:
GoTo boucletri:
debtri:
Range("A4", "I" & cpt - 1).Select
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("B4", "B" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("C4", "C" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("D4", "D" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("E4", "E" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("G4", "G" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SAV").Sort.SortFields.Add Key:=Range("H4", "H" & cpt - 1), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SAV").Sort
.SetRange Range("A3", "K" & cpt - 1)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
fintri:
cpt2 = 3
compteurdoublon:
ar = 0
br = 0
cr = 0
dr = 0
er = 0
fr = 0
gr = 0
hr = 0
ir = 0
cpt2 = cpt2 + 1
If Range("B" & cpt2).Value = "" Then GoTo findoublon:
a = Range("A" & cpt2).Value
a1 = Range("A" & cpt2 + 1).Value
b = Range("B" & cpt2).Value
b1 = Range("B" & cpt2 + 1).Value
c = Range("C" & cpt2).Value
c1 = Range("C" & cpt2 + 1).Value
d = Range("D" & cpt2).Value
d1 = Range("D" & cpt2 + 1).Value
If a = a1 Then ar = 1
If b = b1 Then br = 1
If c = c1 Then cr = 1
If d = d1 Then dr = 1
ResultF = ar + br + cr + dr
If ResultF = 4 Then
Rows(cpt2).Select
Selection.Delete Shift:=xlUp
cpt2 = cpt2 - 1
End If
GoTo compteurdoublon
findoublon:
End Sub
Voilà...
Vous remerciant par avance pour vos propositions.
Cordialement Cédric