Mauvaise execution d'une macro

Bonjour

Dans un module j'ai 9 macros.

Quand à l'aide d'un bouton j’exécute la macro bmelanger ça fonctionne bien

si j’exécute la macro dmelanger avec un autre bouton cela me recopie le résultat de bmelanger

Ou se situe mon problème?

Sub bmelanger()
Range("B3:B12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([b3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [b3].Resize(UBound(t)) = t
End Sub

Sub dmelanger()
Range("D3:D12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([d3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [d3].Resize(UBound(t)) = t
End Sub
Sub fmelanger()
Range("f3:f12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([f3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [f3].Resize(UBound(t)) = t
End Sub
Sub hmelanger()
Range("h3:h12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([h3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [h3].Resize(UBound(t)) = t
End Sub

Sub jmelanger()
Range("j3:j12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([j3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [j3].Resize(UBound(t)) = t
End Sub
Sub lmelanger()
Range("l3:ll12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([l3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [l3].Resize(UBound(t)) = t
End Sub

Sub nmelanger()
Range("n3:n12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([n3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [n3].Resize(UBound(t)) = t
End Sub
Sub pmelanger()
Range("p3:p12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([p3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [p3].Resize(UBound(t)) = t
End Sub

Sub rmelanger()
Range("r3:r12").Select
    Selection.ClearContents
Dim t, i&, N&, aux
   t = Range([r3], Cells(Rows.Count, 1).End(xlUp))
   Randomize
   For i = 1 To UBound(t): N = 1 + Int(Rnd * UBound(t)): aux = t(i, 1): t(i, 1) = t(N, 1): t(N, 1) = aux: Next
   [r3].Resize(UBound(t)) = t
End Sub

Problème résolu

 t = Range([b3], Cells(Rows.Count, 1).End(xlUp))  a chaque macro il faut modifier de 2 Count, 1 pour dmelanger il faut mettre 3

re,

c'est peut-être plus facile d'avoir une macro paramétrisée

Sub M_melanger(Plage As Range)

     Dim t, i&, N&, aux
     With Plage
          t = .Value
          Randomize
          For i = 1 To UBound(t)
               N = 1 + Int(Rnd * UBound(t))
               aux = t(i, 1)
               t(i, 1) = t(N, 1)
               t(N, 1) = aux
          Next
          Plage.Value = t
     End With
End Sub

Sub dmelanger()
     M_melanger Range("D3:D12")
End Sub

Sub fmelanger()
     M_melanger Range("f3:f12")
End Sub

Sub hmelanger()
     M_melanger Range("h3:h12")
End Sub

etc
Rechercher des sujets similaires à "mauvaise execution macro"