Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
@mapomme tu es au top
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…