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...
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
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
Comme d'hab ;-)))
Me semblait aussi que tes explications
manquaient de précisions précises :-)))
Serge
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:40FC4F45.35C305E9@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:40FC25C2.E3A7AD69@Suppgaboly.com...
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...
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
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.
Bonjour garnote.
Par curiosité, c'est quoi ta petite adaptation ?
Yé veux sawoir :-)
Par curiosité, c'est quoi ta petite adaptation ? Yé veux sawoir :-)
Peut-être la commande Randomize.
Très élégante ta procédure.
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
Salut,
juste adaptation à mon cas perso...choisir la plage et le nombre de
selection, rien de plus... juré ! ;o)
encore merci
Domi
"garnote" <rien@absent.net> a écrit dans le message de
news:iuWKc.78257$Rf.14615@edtnps84...
Salut Domi,
Par curiosité, c'est quoi ta petite adaptation ?
Yé veux sawoir :-)
Serge
"Domi" <scrat83@free.fr> a écrit dans le message de
news:ewPn%23AdbEHA.2908@TK2MSFTNGP10.phx.gbl...
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" <rien@absent.net> a écrit dans le message de
news:NKVKc.78245$Rf.4258@edtnps84...
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" <scrat83@free.fr> a écrit dans le message de
news:ux%23vjBcbEHA.2660@TK2MSFTNGP12.phx.gbl...
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...
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...