repetition d une macro

raym1313

XLDnaute Occasionnel
auriez vous la gentillesse de m aider svp

je souhaiterai executer une macro autant de fois que necessaire

tant que le valeur zero d'une cellule du classeur n est pas atteinte



merci pour votre aide

amicalement
raym1313
 

néné06

XLDnaute Accro
Re : repetition d une macro

Bonsoir raym1313

Si tu pouvais nous fournir un petit exemple de ce que tu recherches, nous pourrions apporter l'aide dont tu as besoin .
Je suppose que la macro ne s'exécute qu'une fois pour obtenir le résultat.
 

ROGER2327

XLDnaute Barbatruc
Re : repetition d une macro

Bonsoir à tous
En espérant que notre ami finira par lires les réponses qui lui sont faites, il n'est guère possible d'en dire plus que ceci :
Code:
[COLOR="DarkSlateGray"][B]Sub répéter()
   [COLOR="SeaGreen"]'Ce code répète la procédure "procédure_à_répéter"
   'tant que la cellule Range("test") à une valeur
   'différente de 0.[/COLOR]
   Do
      procédure_à_répéter
   Loop Until Range("test").Value = 0
End Sub

Sub procédure_à_répéter()
   [COLOR="SeaGreen"]'Code dont on est certain que la répétition conduit
   'nécessairement à affecter la valeur 0 à la cellule
   'Range("test").[/COLOR]
End Sub[/B][/COLOR]
ROGER2327
#2970
 

raym1313

XLDnaute Occasionnel
Re : repetition d une macro

merci roger 2327 de t interesser a mon projet

je vais essayer d etre plus precis

en colonne A1 j ai une liste de 12 noms
en colonne B1 j ai une liste de x club different ( la c est tres variable ca peut aller de 5 clubs a 9 .. 10 .. clubs differents
en colonne C1 J ai des chiffres aleatoires alea()

je groupe les clubs par groupe de 4

alain nice 0.123456 0
alex nantes 0.234568 0
brigitte paris 0.158679 1
bernard paris 0.324589 1

michel lyon 0.145897 0
olive paris 0.145897 0
sophie le mans 0.356897 0
francoise la rochelle 0.258979 0

franck le mans 0.159753 1
raymond menton 0.658978 0
marc lyon 0.568974 0
norbert le mans 0.456897 1
total 4


en colonne D1 une petite formule m indique - 1 - si un meme club figure plusieurs fois. - 0 - pour 4 clubs differents dans le groupe.
exemple dans le 1 er groupe Paris figure 2 fois ( 2 fois donc 1 )
dans le 2 eme groupe les 4 clubs sont distinct donc ( 0 partout )
dans le 3 eme groupe le mans figure 2 fois ( on trouve donc 2 fois 1 )

la ligne ou figure total - c'est le total de tous les tests fait en colonne ( D )

je souhaiterai donc une macro qui me trie par ordre numerique la colonne des chiffres aleatoires
et que cette macro soir repeté si le total n'est pas egal a zero

dans le cas ci dessus il faudrait repeter la macro puisque le total est egal a 4


merci pour ton aide

amicalement
raym1313 :)
 

raym1313

XLDnaute Occasionnel
Re : repetition d une macro

merci roger 2327 de t interesser a mon projet

je vais essayer d etre plus precis

en colonne A1 j ai une liste de 12 noms
en colonne B1 j ai une liste de x club different ( la c est tres variable ca peut aller de 5 clubs a 9 .. 10 .. clubs differents
en colonne C1 J ai des chiffres aleatoires alea()

je groupe les clubs par groupe de 4

alain nice 0.123456 0
alex nantes 0.234568 0
brigitte paris 0.158679 1
bernard paris 0.324589 1

michel lyon 0.145897 0
olive paris 0.145897 0
sophie le mans 0.356897 0
francoise la rochelle 0.258979 0

franck le mans 0.159753 1
raymond menton 0.658978 0
marc lyon 0.568974 0
norbert le mans 0.456897 1
total 4


en colonne D1 une petite formule m indique - 1 - si un meme club figure plusieurs fois. - 0 - pour 4 clubs differents dans le groupe.
exemple dans le 1 er groupe Paris figure 2 fois ( 2 fois donc 1 )
dans le 2 eme groupe les 4 clubs sont distinct donc ( 0 partout )
dans le 3 eme groupe le mans figure 2 fois ( on trouve donc 2 fois 1 )

la ligne ou figure total - c'est le total de tous les tests fait en colonne ( D )

je souhaiterai donc une macro qui me trie par ordre numerique la colonne des chiffres aleatoires
et que cette macro soir repeté si le total n'est pas egal a zero

dans le cas ci dessus il faudrait repeter la macro puisque le total est egal a 4


merci pour ton aide

amicalement
raym1313
 

ROGER2327

XLDnaute Barbatruc
Re : repetition d une macro

Re...
Ne croyez vous pas qu'il serait plus simple de déposer votre classeur ?
J'ai du mal à interpréter votre texte : d'une part vous dites que, dans la colonne B, se trouvent des noms tous différents, mais on trouve un peu plus loin à côté des noms de la colonne A (donc en colonne B) :

nice
nantes
paris
paris

lyon
paris
le mans
la rochelle

le mans
menton
lyon
le mans
Sans doute comprends-je de travers...
Pouvez-vous préciser ?​
ROGER2327
#2971
 

raym1313

XLDnaute Occasionnel
Re : repetition d une macro suite

rebonjour roger
et tout ceux qui ont la gentillesse de m aider

suite a ton message

j avais avant windows xp
j ai maintenant windows 7
et qd je ve envoyer le fichier joint il me met format de fichier invalide

pourtant je procede comme sur xp
je me permet de te reformuler differemment ma demande, en attendant de trouver une solution sur le pb ci dessus


inscription pour un tournoi de bridge

chaque fois qu 'une personne s inscrit je la rajoute a cette liste
en col - A - son nom ( si il y a 12 inscrits il y aura 12 noms differents
en col - B - son club ( par contre il peux y avoir plusieurs personne differents mais d'un meme club )
en col - C - je lui affecte un nombre aleatoire alea()

en col - D - je cree une formule qui par groupe de 4 determine si un club apparait plusieurs fois dans le groupe
si(b1=b2;1;si(b1=b3;1;si(b1=b4;1;0)


en col - D - dans la cellule - D80 - je fais la somme de cette colonne
si - D80 - n'est pas égal a zero , répétition de la macro

c'est pour cette macro que je souhaiterai que vous m'aidiez

je voudrai une macro qui trie par ordre numérique la col - C - de (D1-D79)
mais que cette macro soit répétée tant que - D80 - n'est pas égal a zero
car si - D80 - egal zero cela voudra dire que dans chaque groupe les clubs
seront de ville différente

desole de proceder comme cela je vais voir pourquoi je ne pe pas transferer
les messages

merci encore
raym1313
 

ROGER2327

XLDnaute Barbatruc
Re : repetition d une macro

Re...
J'ai tenté d'analyser votre projet, et voici ce que j'en comprends :
Vous voulez mélanger aléatoirement vos données jusqu'à ce que, prises par groupes de quatre, aucun groupe ne contienne de doublon.
On peut en effet supposer qu'après un assez grand nombre d'essais, la condition posée sera vérifiée.
Malheureusement, l'assez grand nombre en question risque de devenir un très grand nombre. Si vous souhaitez traiter une douzaine de données, vous pouvez espérer un résultat assez rapide.
Pour quatre-vingts données, vous risquez d'avoir à attendre longtemps que le hasard fasse bien les choses...

Je vous propose donc une procédure fondée sur un tout autre principe permettant d'avoir un résultat rapide, même avec quelques centaines de données :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Organiser_Click()
Dim adr1$, adr2$
Dim i&, j&, k&, l&, m&, n&, tmp As Variant
Dim collC As New Collection, sDat, oDat, lDat&, cDat&
   [COLOR="SeaGreen"]'
   'Paramètres de la zone de données :[/COLOR]
   adr1 = "A2:C": adr2 = "B2" '***
  [COLOR="SeaGreen"] '[/COLOR]
   oDat = Range(adr1 & Range(adr2).End(xlDown).Row).Value
   lDat = UBound(oDat, 1)
   cDat = UBound(oDat, 2) + 2
   ReDim Preserve oDat(1 To lDat, 1 To cDat)
   Randomize
   For k = 1 To lDat: oDat(k, cDat) = Rnd: Next k
   For i = 1 To lDat
      For j = i To lDat
         If oDat(j, cDat) < oDat(i, cDat) Then
            For k = 1 To cDat: tmp = oDat(j, k): oDat(j, k) = oDat(i, k): oDat(i, k) = tmp: Next k
         End If
      Next j
   Next i
   cDat = cDat - 1
   ReDim Preserve oDat(1 To lDat, 1 To cDat)
   For k = 1 To lDat
      Set collC = Nothing
      On Error Resume Next
      For i = 1 To lDat
         If IsEmpty(oDat(i, cDat)) Then collC.Add oDat(i, 2), oDat(i, 2)
      Next i
      On Error GoTo 0
      If collC.Count = 0 Then Exit For
      ReDim sDat(1 To collC.Count, 1 To 2)
      For i = 1 To collC.Count
         sDat(i, 1) = collC.Item(i)
         For j = 1 To lDat
            sDat(i, 2) = sDat(i, 2) + (oDat(j, 2) = sDat(i, 1)) * IsEmpty(oDat(j, cDat))
         Next j
      Next i
      For i = 1 To collC.Count
         For j = i To collC.Count
            If sDat(j, 2) > sDat(i, 2) Then
               For l = 1 To 2: tmp = sDat(j, l): sDat(j, l) = sDat(i, l): sDat(i, l) = tmp: Next l
            End If
         Next j
      Next i
      For l = 1 To WorksheetFunction.Min(4, collC.Count)
         For n = 1 To lDat
            If (oDat(n, 2) = sDat(l, 1)) * IsEmpty(oDat(n, cDat)) Then m = m + 1: oDat(n, cDat) = m: Exit For
         Next n
      Next l
   Next k
   For i = 1 To lDat
      For j = i To lDat
         If oDat(j, cDat) < oDat(i, cDat) Then
            For k = 1 To cDat: tmp = oDat(j, k): oDat(j, k) = oDat(i, k): oDat(i, k) = tmp: Next k
         End If
      Next j
   Next i
   Range(adr1 & Range(adr2).End(xlDown).Row).Value = oDat
End Sub[/B][/COLOR]
Voyez sa mise en œuvre dans le classeur joint.​
ROGER2327
#2975
 

Pièces jointes

  • Distribution_2975.xls
    28 KB · Affichages: 74
Dernière édition:

Discussions similaires

Réponses
3
Affichages
515

Statistiques des forums

Discussions
312 488
Messages
2 088 863
Membres
103 979
dernier inscrit
imed