bonjour le forum, j ai tableau contenant 7 colonnes et une quarantaine de lignes , dans chaque colonne j ai 32 cellules vides dans lesquels je dois entrer des nombres de 1 a 32 sans qu il y est 2 fois le meme nombre dans la meme colonne , le reste des cellules sont deja rempli par des x. pour cela j ai une macro qui me rempli les cellules vides par les nombres, mais il me les rempli tj dans le meme ordre c est a dire de 1 a 32 et ce que je souhaiterais c est qu il me rempli les cellules par des nombres aleatoire compris entre 1 et 32.
voici ma macro.
Sub Verif()
'Déclaration des variables
Dim Cel As Range, Reponse As Integer, i As Integer
'ici on initialise un tableau (array) dans la mémoire de l'ordi
Dim MesSv(1 To 32)
'On scanne les 40 cellules dans la colonne où se trouve le curseur
'Exemple de B2 à B41, la ligne 1 est occupée avec les entêtes de notre tableau
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
'ici on remplit notre array avec des true ou des false
For i = 1 To 32
'Si la cellule contient la valeur de i
If Cel = i Then
'on place à true
MesSv(i) = True
End If
Next
Next
'Après traitement mettre les Sv en place
For i = 1 To 32
If MesSv(i) = False Then
Reponse = MsgBox('Le Sv ' & i & ' n'est pas attribué, Voulez-vous le distribuer', vbYesNo, 'SERVICES SEMAINE')
'si la réponse est oui
If Reponse = 6 Then
'pour trouver la première cellule vide de la colonne
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
Cel.Select 'pas nécessaire mais cela permet de visualiser où l'on se trouve
If Cel = '' Then
Cel = i
'ici si on vient de remplir la cellule on doit quitter la boucle for each
GoTo Poursuite
End If
Next
ElseIf Reponse = 7 Then
'idem si on repond non, on quitte la boucle
GoTo Poursuite
End If
End If
'point de repère pour le Goto
Poursuite:
Next
End Sub
merci pour votre aide.
voici ma macro.
Sub Verif()
'Déclaration des variables
Dim Cel As Range, Reponse As Integer, i As Integer
'ici on initialise un tableau (array) dans la mémoire de l'ordi
Dim MesSv(1 To 32)
'On scanne les 40 cellules dans la colonne où se trouve le curseur
'Exemple de B2 à B41, la ligne 1 est occupée avec les entêtes de notre tableau
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
'ici on remplit notre array avec des true ou des false
For i = 1 To 32
'Si la cellule contient la valeur de i
If Cel = i Then
'on place à true
MesSv(i) = True
End If
Next
Next
'Après traitement mettre les Sv en place
For i = 1 To 32
If MesSv(i) = False Then
Reponse = MsgBox('Le Sv ' & i & ' n'est pas attribué, Voulez-vous le distribuer', vbYesNo, 'SERVICES SEMAINE')
'si la réponse est oui
If Reponse = 6 Then
'pour trouver la première cellule vide de la colonne
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
Cel.Select 'pas nécessaire mais cela permet de visualiser où l'on se trouve
If Cel = '' Then
Cel = i
'ici si on vient de remplir la cellule on doit quitter la boucle for each
GoTo Poursuite
End If
Next
ElseIf Reponse = 7 Then
'idem si on repond non, on quitte la boucle
GoTo Poursuite
End If
End If
'point de repère pour le Goto
Poursuite:
Next
End Sub
merci pour votre aide.