Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Enlever au hasard un zéro sur 2

4 réponses
Avatar
Garnote
Bonsoir,

Les cellules A1:C1 contiennent respectivement
1000, 0 et 0
ou
0, 1000 et 0
ou
0, 0 et 1000
Une macro sélectionnne au hasard une des trois cellules.
Avec une autre macro, je veux réaliser ceci :
1) Si la cellule active contient 0, je veux effacer l'autre 0
2) et si elle contient 1000, je veux effacer « au hasard »
un des deux 0 qui restent.
Pour le 1) je sais faire mais comment réaliser 1) et 2)
avec la même macro ?

Avec cette macro j'arrive à enlever un 0 mais pour le cas 2),
le 0 enlevé ne l'est pas au hasard :

Sub Enlever_Un_0()
Set ici = ActiveCell
For j = 1 To 3
If Cells(1, j).Address <> ici.Address And Cells(1, j) = 0 Then
Cells(1, j).ClearContents
k = k + 1
End If
If k = 1 Then Exit Sub
Next j
End Sub


Serge

4 réponses

Avatar
FdeCourt
Salut,

En option Base 1 (ca fait plus de code, mais c'est plus clair) :

Option Base 1
Sub Enlever_Un_0()
Dim monTablo(2)
Set ici = ActiveCell
x = 1
For j = 1 To 3
If ici.Column <> j Then
monTablo(x) = j
x = x + 1
End If
Next j
If ici = 1000 Then
Cells(1, monTablo(Int(Rnd * (3 - 1) + 1))).ClearContents
ElseIf Cells(1, monTablo(1)) = 0 Then
Cells(1, monTablo(1)).ClearContents
Else
Cells(1, monTablo(2)).ClearContents
End If
End Sub

Ca fonctionne pour un tableau de trois colonnes.
Avec plus... la règle change.

Bonne soirée.

Cordialement,

F.
Avatar
Garnote
Ave,

Petit ajout : Randomize
Petite simplif : Rnd*2+1
Tout est OK.

Merci

Serge


"FdeCourt" a écrit dans le message de news:

Salut,

En option Base 1 (ca fait plus de code, mais c'est plus clair) :

Option Base 1
Sub Enlever_Un_0()
Dim monTablo(2)
Set ici = ActiveCell
x = 1
For j = 1 To 3
If ici.Column <> j Then
monTablo(x) = j
x = x + 1
End If
Next j
If ici = 1000 Then
Cells(1, monTablo(Int(Rnd * (3 - 1) + 1))).ClearContents
ElseIf Cells(1, monTablo(1)) = 0 Then
Cells(1, monTablo(1)).ClearContents
Else
Cells(1, monTablo(2)).ClearContents
End If
End Sub

Ca fonctionne pour un tableau de trois colonnes.
Avec plus... la règle change.

Bonne soirée.

Cordialement,

F.
Avatar
FdeCourt
Effectivement, le calcul (3-1) est un peu con.
Par contre, ca fait quoi randomize ?

Cordialement,

F.
Avatar
Garnote
Sans Randomize, tu as de grandes chances de voir réapparaître
les mêmes séries de nombres suite à un enregistrement de ton
classeur. Voir l'aide à ce sujet.

Sub Pseudo_Hasard()
For i = 1 To 10
ActiveCell.Offset(i - 1, 0) = Int(100 * Rnd)
Next i
End Sub

Serge


"FdeCourt" a écrit dans le message de news:

Effectivement, le calcul (3-1) est un peu con.
Par contre, ca fait quoi randomize ?

Cordialement,

F.