Microsoft 365 Coller un code aleatoire dans une cellule sélectionnées au hasard

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

LandryK7

XLDnaute Nouveau
bonjour, Je n'arrive pas à faire fonctionner le code ci dessous sensé choisir au hasard une cellule dans une plage donnée et y coller un code aléatoire de 20 caractères. Help please

Sub Code_AleaDecomptage()

Sheets("Aleatoire").Select

LettreAleatoires = ""

Carac = "ABCDEFGHJKMNPQRSTUVWXYZ123456789abcdefghjkmnpqrstuvwxyz"

For i = 1 To 20

NombreAleatoires = Int(Len(Carac) * Rnd) + 1

LettreAleatoires = LettreAleatoires & Mid(Carac, NombreAleatoires, 1)

Next i

Range("m1") = LettreAleatoires

End Sub

Sub Selection_Alea()

Call Code_AleaDecomptage

'Sélection aléatoire d'une cellule

Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1).Select


If Selection <> Range("a1") And Selection <> Range("d4") _

And Selection <> Range("e5") And Selection <> Range("f8") _

And Selection <> Range("b8") Then

Selection = Range("m1").Value

End If

End Sub
 
Solution
Bonjour @LandryK7, sylvanu,

Je te propose le fichier ci-dessous ; fais Ctrl e plusieurs fois ; tu pourras voir
qu'effectivement, les 5 cellules A1, D4, E5, F8 et B8 sont préservées. 😉

voici le code VBA :

VB:
Option Explicit

Function CodAlea() As String
  Const Carac$ = "ABCDEFGHJKMNPQRSTUVWXYZ123456789abcdefghjkmnpqrstuvwxyz"
  Dim chn$, lng As Byte, p As Byte, i As Byte: lng = Len(Carac)
  For i = 1 To 20
    p = Int(Rnd * lng) + 1: chn = chn & Mid$(Carac, p, 1)
  Next i
  CodAlea = chn
End Function

Sub Selection_Alea()
  Randomize Timer
  With Worksheets("Aleatoire").Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1)
    If InStr("A1 D4 E5 F8 B8", .Address(0, 0)) = 0 Then .Value = CodAlea()
  End With
End Sub
...
Bonjour Landry,
Voir PJ avec :
VB:
Sub Selection_Alea()
Call Code_AleaDecomptage
'Sélection aléatoire d'une cellule
Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1).Select
If Selection.Address <> "a1" And Selection.Address <> "d4" _
And Selection.Address <> "e5" And Selection.Address <> "f8" _
And Selection.Address <> "b8" Then
    Selection = Range("m1").Value
End If
End Sub
 

Pièces jointes

Bonjour @LandryK7, sylvanu,

Je te propose le fichier ci-dessous ; fais Ctrl e plusieurs fois ; tu pourras voir
qu'effectivement, les 5 cellules A1, D4, E5, F8 et B8 sont préservées. 😉

voici le code VBA :

VB:
Option Explicit

Function CodAlea() As String
  Const Carac$ = "ABCDEFGHJKMNPQRSTUVWXYZ123456789abcdefghjkmnpqrstuvwxyz"
  Dim chn$, lng As Byte, p As Byte, i As Byte: lng = Len(Carac)
  For i = 1 To 20
    p = Int(Rnd * lng) + 1: chn = chn & Mid$(Carac, p, 1)
  Next i
  CodAlea = chn
End Function

Sub Selection_Alea()
  Randomize Timer
  With Worksheets("Aleatoire").Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1)
    If InStr("A1 D4 E5 F8 B8", .Address(0, 0)) = 0 Then .Value = CodAlea()
  End With
End Sub
remarque : note bien que je n'ai pas utilisé la cellule M1. 😛

tu demandes : « qu'est-ce que c'est Randomize Timer ? à quoi ça sert ? » ;
oh, j'en sais rien ; je l'ai mis comme ça, à tout hasard ; c'est juste une
lubie de programmeur ; faut pas t'inquiéter pour si peu ! si vraiment
tu tiens à le savoir, je te laisse chercher dans l'Aide VBA. 😀


soan
 

Pièces jointes

Dernière édition:
Bonjour à tous de si bon matin,
@Landkry,
J'avais compris, mais j'avais un bug. Selection.address n'est pas une chaine. J'avais oublié le CSTr.
VB:
Sub Selection_Alea()
Call Code_AleaDecomptage
'Sélection aléatoire d'une cellule
Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1).Select
N = CStr(Selection.Address)
If N <> "$A$1" And N <> "$D$4" And N <> "$E$5" And N <> "$F$8" And N <> "$B$8" Then
    ActiveCell = Range("m1").Value
End If
End Sub
 

Pièces jointes

Bonjour @LandryK7, sylvanu,

Je te propose le fichier ci-dessous ; fais Ctrl e plusieurs fois ; tu pourras voir
qu'effectivement, les 5 cellules A1, D4, E5, F8 et B8 sont préservées. 😉

voici le code VBA :

VB:
Option Explicit

Function CodAlea() As String
  Const Carac$ = "ABCDEFGHJKMNPQRSTUVWXYZ123456789abcdefghjkmnpqrstuvwxyz"
  Dim chn$, lng As Byte, p As Byte, i As Byte: lng = Len(Carac)
  For i = 1 To 20
    p = Int(Rnd * lng) + 1: chn = chn & Mid$(Carac, p, 1)
  Next i
  CodAlea = chn
End Function

Sub Selection_Alea()
  Randomize Timer
  With Worksheets("Aleatoire").Cells(Int(Rnd * 10) + 1, Int(Rnd * 10) + 1)
    If InStr("A1 D4 E5 F8 B8", .Address(0, 0)) = 0 Then .Value = CodAlea()
  End With
End Sub
remarque : note bien que je n'ai pas utilisé la cellule M1. 😛

tu demandes : « qu'est-ce que c'est Randomize Timer ? à quoi ça sert ? » ;
oh, j'en sais rien ; je l'ai mis comme ça, à tout hasard ; c'est juste une
lubie de programmeur ; faut pas t'inquiéter pour si peu ! si vraiment
tu tiens à le savoir, je te laisse chercher dans l'Aide VBA. 😀


soan
Merci Soan! ça fonctionne comme il faut
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
106
Réponses
0
Affichages
538
Retour