VBA Aide pour procédure bonne à 90 %

Bonjour à tous

la procédure doit prendre en compte la plage de cellule définie dans la cellule G1

la prodédure actuelle définie de façon arbitraire la plage A1:A et(contenu cel B1) et l'affiche dans la cel G1) !!!

Vous pouvez vous servir du fichier qui permet un examen rapide du probleme et la simulation en entrant dans la cellule G1 une plage de cels ex L2:M7

Merci

Private Sub Worksheet_Calculate()

Dim res As Integer, i As Integer

Dim pl0 As String, pl1 As String, pl2 As String, pl As String

pl0 = Range("A1").End(xlDown).Address

pl = Range("A1:" & pl0).Address

Range("G1") = pl

pl2 = Range("G1")

res = Range("B1")

If Range("B1") = 0 Then

Range(pl2).ClearContents

Else

Range(pl2).ClearContents

For i = 1 To res

Cells(i, 1) = Int((Range("F1") * Rnd) + 1)

Next i

End If

pl0 = Range("A1").End(xlDown).Address

pl = Range("A1:" & pl0).Address

Range("G1") = pl

End Sub

ps: En rouge à effacer, et déclarer la plage définie dans G1

cordialement

JB

Bonjour

D'après ce que j'ai compris

Remplaces ta procédure par celle-ci

Private Sub Worksheet_Calculate()
Dim Cel As Range

  Range(Range("G1")).ClearContents
  If Range("B1") <> 0 Then
    For Each Cel In Range(Range("G1"))
      Cel = Int((Range("F1") * Rnd) + 1)
    Next Cel
  End If
End Sub

re Banzai

C'est presque parfait et bien plus simple

Juste que les le nombre de cellules concernées dans la plage définie ne tient pas compte du nombre calculé dans la celle B1 la plage se rempli entièrement

on passe à 95%

Merci de ton aide

Ps: tu as le fichier de notre validatrice Muriel pour mieux voir, rien ne lui échappe lol

cordialement

Bonjour

A essayer

Private Sub Worksheet_Calculate()
Dim Cel As Range

  Range(Range("G1")).ClearContents
  If Range("B1") <> 0 Then
    For Each Cel In Range(Range("G1"))
      If Application.CountA(Range(Range("G1"))) = Range("B1") Then Exit Sub
      Cel = Int((Range("F1") * Rnd) + 1)
    Next Cel
  End If
End Sub

Re Bjr et bravo Banzai

du travail de Pro

Par contre je n'arrive pas à mettre la sécurité de dépassement que tu m'as donné, ni dans une cellule de la feuille ni en MFC sur B1

je pense que la formule de protection doit dans ce cas être intégrée dans ta procédure SI(LIGNES(INDIRECT(G1))*COLONNES(INDIRECT(G1))<B1;"Alerte";E1)

le si sur B1 le fond en rouge le si en plus le mot "Alerte"

Et là pour toi, je vais devoir encore ouvrir la boite à "bisous" et continuer à me ruiner

merci de ton aide Comme d'ab tu as ici le fichier à jour

cordialement

Muriel

Bonjour Muriel,

Que tu ne puisse pas mettre le test c'est normal, car tu lui demande de comparer sa propre valeur avec G1 du coup il tourne en boucle vu que G1 depend de B1 (d'ailleurs peu importe ou j'ai essayé de mettre le test, j'ai eu le droit à un beau plantage)

Par contre je n'ai vraiment pas du comprendre ton fichier car chez moi B1 est toujours égal à E1 qui remplit bien la bonne plage en G1 et est donc toujours égal aux nombres de cellule de la plage définie en G1, ca qui fait qu'il n'y a jamais la condition pour afficher le message d'alerte.

Bonjour

Un essai

re Banzai

je vais regarder de plus prêt la securité mais pour moi c 'est top

tu nous as fait un travail formid

vraiment merci

grace à vous pour l'heure on a automatisé 70 % du projet !!!

et Sur 10 problm posés en 15 jours = 10 solutions tops

Que dire d'autre ?

Cordialement

Rechercher des sujets similaires à "vba aide procedure bonne"