OVH Cloud OVH Cloud

VBA : inscrire date dans x cellules selectionnées aleatoirement...

14 réponses
Avatar
Domi
Bonsoir à tous,

Big pb... (au moins pour moi ! )
L'énoncé est simple... la solution l'est moins me semble-t-il...
Je voudrais, par VBA, inscrire la date du jour dans 150 cellules vides de la
plage B10:B1000.
J'insiste sur le "vides", car le but serait ensuite de renouveler la chose
sur la plage jusqu'à ce que toute la plage soit sélectionnée.
Cela me permet de soulever dès maintenant le cas ou il ne reste pas 150
cellules vides...il faudrait que cela sélectionne ce qui reste...

Merci
Domi

4 réponses

1 2
Avatar
coqueugniot cyril
-----Message d'origine-----
Bonsoir à tous,

Big pb... (au moins pour moi ! )
L'énoncé est simple... la solution l'est moins me semble-
t-il...

Je voudrais, par VBA, inscrire la date du jour dans 150
cellules vides de la

plage B10:B1000.
J'insiste sur le "vides", car le but serait ensuite de
renouveler la chose

sur la plage jusqu'à ce que toute la plage soit
sélectionnée.

Cela me permet de soulever dès maintenant le cas ou il
ne reste pas 150

cellules vides...il faudrait que cela sélectionne ce qui
reste...


Merci
Domi


.


Lavoisier avait dit :
'Rien ne se perd, rien ne se créée, tout se transorme',
cela veux dire qu'il y aura toujours une réponse à une
question.

Voiçi ma réponse :

dans VBA, taper la prog suivante :

dim b
for a to 1000
if len(cells(a,2))=0 then
cells(a,2).valueÚte
b=b+1
if b0 then
goto fin
endif
endif
next
fin:

Bon courage

Avatar
Michel Gaboly
Comme d'hab ;-)))


Me semblait aussi que tes explications
manquaient de précisions précises :-)))

Serge

"Michel Gaboly" a écrit dans le message de
news:
Serge,

Une précision :

IsEmpty(c) n'est pas équivalent à c="", mais à c.Formula = ""

Si tu entres dans une cellule, la formule ="", la cellule paraîtra vide,
mais isEmpty renverra False.

IsEmpty, pour une cellule correspond à la fonction Excel ESTVIDE().



Re,

Si c est une cellule, oui.

Cependant IsEmpty est d'usage plus général : IsEmpty(Var) renvoie
True, si Var est une variable non encore initialisée, OU si Var est
égal à une chaine vide dans un contexte de chaîne, OU si Var est égal
à 0 dans un contexte numérique.

Attention toutefois, IsEmpty() ne renvoie une info pertinente que
pour les variables de type Variant, comme tu peux le voir avec
cette procédure, où aucune des 2 variables Var et Num n'est
initialisée, mais où IsEmpty(Var) renvoie True, alors que
IsEmpty(Num) renvoie False :

Sub Toto()
Dim Var As Variant, Num As Integer
MsgBox IsEmpty(Var) & vbNewLine & IsEmpty(Num)
End Sub
.


Salut Domi et Michel,

Question pour Michel :

IsEmpty(c) est-il toujours équivalent à c=""

Serge

Sub Remplir_De_Dates_Alea_Par_Paquet_De_150()
Dim ici As Range, n As Integer, L As Integer
Set ici = Range("B10:B1000")
If WorksheetFunction.CountIf(ici, "") = 0 Then Exit Sub
Do Until n = 150
L = Int(991 * Rnd + 1)
If ici(L, 1) = "" Then
ici(L, 1) = Date
n = n + 1
If WorksheetFunction.CountIf(ici, "") = 0 Then Exit Sub
End If
Loop
End Sub

Serge
"Michel Gaboly" a écrit dans le message de
news:
Bonsoir,

Voici une base de départ :

Sub DatesAlea()
Dim Ref As Range, NbCellVides As Long, c As Range, Debut As Range,
Delta




As Long, i As Integer
Set Ref = Range("Plage")
NbCellVides = Evaluate("SUMPRODUCT(ISBLANK(Plage) * 1)")
If NbCellVides <= 150 Then
For Each c In Ref
If IsEmpty(c) Then c = Date
Next c
Else
Set Debut = Range("B" & Ref.Row)
Delta = Ref.Rows.Count - 1
Randomize ' Initialisation du générateur de nombres au
hasard




Do
Set c = Debut.Offset(Delta * Rnd)
If IsEmpty(c) Then
c = Date
' c.Select
i = i + 1
End If
Loop Until i = 150
End If
End Sub

Il faut que la plage concernée (ici B10:B1000) ait été nommée
"Plage".





NbCellVides permet de déterminer si le nombre de cellules vides est
inférieur ou non à 150. Si oui, la date est inscrite dans toutes les
cellules

vides de "Plage".

Sinon, une succession de tirages au hasard permet de déterminer 150
cellules vides dans la plage, dans lesquelles on entre la date.

NB - Pour simplifier j'ai considéré que la plage concernée est
toujours




en colonne B (définition de Début).



Bonsoir à tous,

Big pb... (au moins pour moi ! )
L'énoncé est simple... la solution l'est moins me semble-t-il...
Je voudrais, par VBA, inscrire la date du jour dans 150 cellules
vides





de la
plage B10:B1000.
J'insiste sur le "vides", car le but serait ensuite de renouveler
la





chose
sur la plage jusqu'à ce que toute la plage soit sélectionnée.
Cela me permet de soulever dès maintenant le cas ou il ne reste
pas 150





cellules vides...il faudrait que cela sélectionne ce qui reste...

Merci
Domi


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
docm
Bonjour garnote.

Par curiosité, c'est quoi ta petite adaptation ?
Yé veux sawoir :-)


Peut-être la commande Randomize.

Très élégante ta procédure.

Avatar
Domi
Salut,
juste adaptation à mon cas perso...choisir la plage et le nombre de
selection, rien de plus... juré ! ;o)
encore merci
Domi

"garnote" a écrit dans le message de
news:iuWKc.78257$
Salut Domi,

Par curiosité, c'est quoi ta petite adaptation ?
Yé veux sawoir :-)

Serge

"Domi" a écrit dans le message de
news:ewPn%
J'ai testé les deux propositions, qui semblent fonctionner parfaitement
bien

(après une petite adaptation pour celle de serge).
Impec ;o)
Merci à tous deux.
Domi

"garnote" a écrit dans le message de
news:NKVKc.78245$

Salut Domi,

Un essai sur une plage plus modeste :

Sub Remplir_De_Dates_Par_Paquet_De_10()
Set ici = Range("A1:H20")
If WorksheetFunction.CountIf(ici, "") = 0 Then Exit Sub
NL = ici.Rows.Count
NC = ici.Columns.Count
n = 0
Do Until n = 10
ligne = Int(NL * Rnd + 1)
colonne = Int(NC * Rnd + 1)
If ici(ligne, colonne) = "" Then
ici(ligne, colonne) = Date
n = n + 1
If WorksheetFunction.CountIf(ici, "") = 0 Then Exit Sub
End If
Loop
End Sub

Cela fait-il sens ? :-)

Serge


"Domi" a écrit dans le message de
news:ux%
Bonsoir à tous,

Big pb... (au moins pour moi ! )
L'énoncé est simple... la solution l'est moins me semble-t-il...
Je voudrais, par VBA, inscrire la date du jour dans 150 cellules
vides




de
la
plage B10:B1000.
J'insiste sur le "vides", car le but serait ensuite de renouveler la
chose


sur la plage jusqu'à ce que toute la plage soit sélectionnée.
Cela me permet de soulever dès maintenant le cas ou il ne reste pas
150



cellules vides...il faudrait que cela sélectionne ce qui reste...

Merci
Domi
















1 2