VBA Syntaxe et Dim  Sujet résolu

Pour toutes vos questions à propos d'Excel ...

VBA Syntaxe et Dim  Sujet résolu

Messagepar dubois » 07 Oct 2009, 13:15

Bonjour au forum,

Pour un tirage de chiffres aléatoires, je ne pige pas bien cette ligne de déclaration
Code: Tout sélectionner
Dim Tableau(120) As Integer

Je vois bien que le 120 indique la limite maxi, mais est-t-on obligé de déclarer comme çà ?

Dans mon cas, j'ai besoin de sortir de 24 à 230 chiffres selon les besoins.
ce nombre correspond à:
Code: Tout sélectionner
Nbr = WorksheetFunction.CountA(Range("ListeAttente"))

Si je mets Dim Tableau(230), cela ne risque t-il pas d'alourdir inutilement la macro ?
Voici le code
Code: Tout sélectionner
Sub Tirage_EquipAléatoire() 'code pompé et adapté à partir d'une macro de Mytå
Dim Temp As Integer, Existe As Boolean
Dim i As Integer, J As Integer
Dim Tableau(120) As Integer, RDest As Range
Dim Nbr As Double, NbP$, TabL, Cel As Range, Top

    Application.ScreenUpdating = False

    Nbr = WorksheetFunction.CountA(Range("ListeAttente"))
    NbP = Range("o4") 'joueurs par équipe

    Set RDest = Range(Cells(4, 7), Cells(4, 6 + NbP))
    TabL = WorksheetFunction.Floor((Nbr / NbP), 1) 'plancher lignes tableau

    Range("g4:i300").ClearContents
    Randomize
    For i = 1 To Nbr
        Existe = True
        While Existe
            Temp = Int(Nbr * Rnd + 1) 'entier
            For J = 1 To Nbr
                If Temp = Tableau(J) Then
                    Existe = True
                    Exit For
                Else
                    Existe = False
                End If
            Next J
        Wend
        Tableau(i) = Temp
    Next i
            For i = 1 To Nbr
                RDest(i).Value = Tableau(i)
            Next i

Merci du coup de pouce
Bonne journée
Claude.
Faire simple, c'est ce qui est le plus compliqué ! et vice versa (à méditer)
dubois
Passionné d'Excel
 
Messages: 9258
Inscription: 08 Déc 2007, 12:03
Localisation: MEUDON région parisienne
Version Excel: Vista Office 2007FR

Messagepar galopin01 » 07 Oct 2009, 13:34

bonjour,
j'ai pas plus analysé que ça, mais à vue de nez et à la tronçonneuse tu peux faire :

Code: Tout sélectionner
Dim Tablo
Nbr = WorksheetFunction.CountA(Range("ListeAttente"))
ReDim Tablo(Nbr)
...la suite sans changement.
A+
galopin01
Membre dévoué
 
Messages: 931
Inscription: 18 Sep 2008, 17:32
Localisation: bourg en bresse
Version Excel: 2010

Messagepar dubois » 07 Oct 2009, 14:25

re,

Ok, c'est bon,
Je ne connaissais pas le ReDim

Par contre j'ai été obligé de mettre
Code: Tout sélectionner
Dim Tablo() As Integer
Nbr = WorksheetFunction.CountA(Range("ListeAttente"))
ReDim Tablo(Nbr)

Sans les parenthèses au 1er Dim, çà bug

Je n'ai pas encore tout assimilé ce code, mais je pense que cela joue sur la boucle qui suit.
en tout cas, merci l'ami
Cordialement
Claude.
Faire simple, c'est ce qui est le plus compliqué ! et vice versa (à méditer)
dubois
Passionné d'Excel
 
Messages: 9258
Inscription: 08 Déc 2007, 12:03
Localisation: MEUDON région parisienne
Version Excel: Vista Office 2007FR


Retourner vers Excel - VBA

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: CB60, galopin01, Google Adsense [Bot] et 38 invités