Microsoft 365 Code VBA pour générer plusieurs valeurs sur une colonne avec une somme bien précise

wiwi520

XLDnaute Nouveau
Bonjour,

Besoin d'aide sur les codes VBA parce que je m'y connais pas du tout (j'apprends...). Alors serait-il possible d'avoir un code VBA avec une commande qui permet de générer dans une colonne des chiffres aléatoirement variant par exemple entre 0.25 et 0.35 et dont la somme ferait exactement 180? En d'autres mots, je souhaiterai en activant la commande (que je nommerai 180) que j'ai automatiquement des chiffres qui varient entre 0.25 et 0.35 qui se génèrent aléatoirement dans une colonne (colonne E dans le fichier en pièce jointe) et que cette somme fasse 180.
Je ne sais pas si j'ai été clair, je vous mets en PJ un fichier pour exemple dans lequel j'ai tapé manuellement les chiffres pour que vous ayez une idée. Merci d'avance les ami(e)s.
 

Pièces jointes

  • Test Macro1.xlsx
    13.6 KB · Affichages: 9

mapomme

XLDnaute Barbatruc
Supporter XLD
Re, [USER=288478]@Frangel165[/USER :) ,

Voici la version v3 complétée.
VB:
Sub Test1()
Const borne1 = 0.25, borne2 = 0.35, Somme = 180
Const limite1 = 5, limite2 = 15
Dim nbNombre As Long
   Application.ScreenUpdating = False
   Range("e7").Resize(Rows.Count - Range("e7").Row, 2).Clear
   AleaAsommeFixe Range("e7"), borne1, borne2, Somme, nbNombre
   With Range("f7").Resize(nbNombre)
      .Formula = Replace(Replace("=RANDBETWEEN(x,y)", "x", limite1), "y", limite2)
      .Value = .Value
   End With
   MsgBox "Solution trouvée: " & vbLf & vbLf & nbNombre & " nombres " & _
         vbLf & "pour une somme de " & Application.Sum(Range("e7").Resize(nbNombre)), vbInformation
End Sub

nota : préférez la v3a.
 

Pièces jointes

  • Frangel165- nombres à somme fixée- v3a.xlsm
    24.6 KB · Affichages: 16
Dernière édition:

wiwi520

XLDnaute Nouveau
Re, [USER=288478]@Frangel165[/USER :) ,

Voici la version v3 complétée.
VB:
Sub Test1()
Const borne1 = 0.25, borne2 = 0.35, Somme = 180
Const limite1 = 5, limite2 = 15
Dim nbNombre As Long
   Application.ScreenUpdating = False
   Range("e7").Resize(Rows.Count - Range("e7").Row, 2).Clear
   AleaAsommeFixe Range("e7"), borne1, borne2, Somme, nbNombre
   With Range("f7").Resize(nbNombre)
      .Formula = Replace(Replace("=RANDBETWEEN(x,y)", "x", limite1), "y", limite2)
      .Value = .Value
   End With
   MsgBox "Solution trouvée: " & vbLf & vbLf & nbNombre & " nombres " & _
         vbLf & "pour une somme de " & Application.Sum(Range("e7").Resize(nbNombre)), vbInformation
End Sub

nota : préférez la v3a.
@mapomme tu es au top :) :) :)
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG