Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Bugs dans la propagation de cellules

  • Initiateur de la discussion Initiateur de la discussion MATLEA
  • Date de début Date de début

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 !

MATLEA

XLDnaute Occasionnel
Bonjour,

Dans le fichier joint je suis bloqué suite à l'apparition de bugs dans la propagation de la formule suivante qui est de type
=SIERREUR(RECHERCHEV(PETITE.VALEUR(SI(ESTTEXTE(CC$25:CC$56);CB$25:CB$56);LIGNE(CD1));CB:CC;2;FAUX);"") visant à randomiser la liste des valeurs.
Je recherche quelqu'un qui pourrait me dire comment régler ce problème soit par correction des bugs soit par utilisation d'une formule alternative.

Merci d'avance et bonne journée.
 

Pièces jointes

OK
Pour l'option graine j'ai changé comme vous le demandez le programme du module MChgGraine par le votre en collant après "Option Explicit" le texte commençant par
VB:
Sub ChangerGraine(Optional ByVal Cible = "!Graine")  jusqu'à End Sub
. C'est ce qu'il fallait faire?
Comment dois-je concrètement me servir de cette graine (que dois-je écrire, dans quelle cellule etc?)

Pour l'autre système, même ce qui apparait basique pour vous reste pour moi du chinois. Comment faire pour écrire une autre macro qui utiliserait cette Sub Mélanger et comment l'affecter à un bouton de formulaire que je ne sais absolument pas comment dessiner dans ma feuille.
C'est la 1ère fois que je me lance dans la création de ces programmes dans excel et comme c'est pour répondre à une demande ponctuelle cela risque fort d'être la dernière. Si vous voulez m'aider et vous avez déjà fait beaucoup il faut aller beaucoup plus en détail dans vos explications. Dès que j'ai une solution qui fonctionne je ne vous ennuierai plus avec mes questions de néophyte.
Bien à vous.


Excusez moi mais
 
 
Pour son utilisation, c'est le dernier argument, en 3ème position, de la fonction Hasard. J'avais mis 1,23456789 en attendant, au hasard ou presque, si je puis dire …
Insérez une forme dans une feuille. Ensuite clic droit, affectez une macro que vous aurez écrite sous forme de procédure Sub.
Pour invoquer une autre Sub, il lui suffit d'invoquer son nom suivi des arguments obligatoires nécessaires, séparés par des virgules.
 
Désolé mais c'est incompréhensible pour moi.

Je ne sais pas si dans la correction du module MChgGraine je dois laisser ou pas votre remarque et si je dois ou pas saisir autre chose. Je ne sais pas ce qu'est le 3ème argument de la fonction Hasard, où il se trouve, ce que je dois en faire et le rapport avec la graine sans même parler du rapport avec ma colonne de noms que je veux modifier. Impossible pour moi en l'état des infos de m'en sortir.

C'est pareil pour la macro. Je n'ai jamais écrit de macro, procédure Sub ou autre et j'ignore tout des arguments obligatoites. Vous n'avez pas affaire à un professionnel. Je suis incapable de vous suivre.
Cordialement.
 
Voir poste 3 :Le troisième argument c'est 1,23456789. C'est celui la qu'il faudra remplacer par le nom d'une graine ou par une adresse de cellule contenant une valeur de graine.
OK merci
et le nom de la graine est bien MChgGraine dans modules et voici ce que j'ai recopié de votre message précédent:

Sub ChangerGraine(Optional ByVal Cible = "!Graine")
Static DernH As Double: Dim H As Double
H = Date Mod 7 + Time: If H = 0 Then H = 7
If H = DernH Then H = H + 2 ^ -19
DernH = H
If TypeOf Cible Is Range Then Cible.Value = H: Exit Sub
If VarType(Cible) <> vbString Then MsgBox "Argument de type """ & TypeName(Cible) & """ incorrect.", _
"Spécifiez une cellule ou un nom pour la feuille ou le classeur.", _
vbCritical, "ChangerGraine": Exit Sub
On Error Resume Next
If Left$(Cible, 1) = "!" Then
If TypeOf ActiveSheet.Evaluate(Mid$(Cible, 2)) Is Range Then
ActiveSheet.Evaluate(Mid$(Cible, 2)).Value = H
Else
ActiveSheet.Names.Add Mid$(Cible, 2), H
If Err Then MsgBox "Err " & Err.Number & " lors de :" _
& vbLf & "ActiveSheet.Names.Add """ & Mid$(Cible, 2) & """, " & H _
& vbLf & Err.Description, vbExclamation, "ChangerGraine"
End If
Else
If TypeOf Application.Evaluate(Cible) Is Range Then
Application.Evaluate(Cible).Value = H
Else
ActiveWorkbook.Names.Add Cible, H
If Err Then MsgBox "Err " & Err.Number & " lors de :" _
& vbLf & "ActiveWorkbook.Names.Add """ & Cible & """, " & H _
& vbLf & Err.Description, vbExclamation, "ChangerGraine"
End If
End If
End Sub
 
Il ne vous reste plus qu'à écrire une petite macro, une Sub à affecter à un bouton, qui va fabriquer des noms de graines ou changer leurs valeurs en invoquant ChangerGraine pour autant de noms que vous aurez besoin de graines différentes pour vos utilisation de la fonction Hasard.
Tien, pourquoi dans le code que vous avez reproduit n'avez vous pas gardé les commentaires guides d'utilisation de ma Sub ChangerGraine ?
 

J'avais enlevé les commentaires de crainte qu'ils n'interfèrent avec le code. J'ai remis le code d'origine.
Par contre la formule =Hasard(LIGNE()-3;$AH$4:$AH$67;MChgGraine) insérée dans la cellule appropriée ne fonctionne pas.

Pour la petite macro dois-je aller dans Affichage, puis Macro puis enregistrer une macro. C'est ca un Sub?

Merci
 
Il faut spécifier comme graine non pas un nom de procédure VBA mais un nom connu d'Excel.
La procédure ChangerGraine est capable de créer un tel nom lui étant spécifié en unique argument, délimité par des doubles apostrophes et d'y faire correspondre l'heure du jour de la semaine de l'exécution.
Une Sub est une procédure commençant par une instruction Sub, écrite dans la fenêtre de code d'un module standard.
Par exemple :
VB:
Sub ChangerLesGraines()
   ChangerGraine "Toto"
   ChangerGraine "Tata"
   ChangerGraine "Titi"
   ChangerGraine "Tutu"
   End Sub
Attention. En testant cette procédure je me suis aperçu que la Sub ChangerGraine fabriquait encore de valeurs identiques de graines.
C'est corrigé en changeant le début comme suit :
VB:
   Static DernH As Double: Dim H As Double
   H = Date Mod 7 + Time: If H = 0 Then H = 7
   Do While H <= DernH: H = H + 2 ^ -19: Loop
   DernH = H
 
Dernière édition:
Je change encore d'avis concernant le début de ma procédure ChangerGraine, car sinon il risquerait de se poser un problème au passage du dimanche soir très tard au lundi matin très tôt. Alors voici mon nouveau début de procédure :
VB:
   Static DernH As Double, Espilon As Double
   Dim H As Double
   H = Date Mod 7 + Time: If H = 0 Then H = 7
   If H = DernH Then
      Espilon = Espilon + 2 ^ -19: H = H + Espilon
   Else
      Espilon = 0: DernH = H
      End If
 
Bonsoir,
votre phrase:

Il faut spécifier comme graine non pas un nom de procédure VBA mais un nom connu d'Excel.
La procédure ChangerGraine est capable de créer un tel nom lui étant spécifié en unique argument, délimité par des doubles apostrophes et d'y faire correspondre l'heure du jour de la semaine de l'exécution.
Avouez que pour un néophyte ce n'est pas simple;
Un nom connu d'excel! mais comment je sais moi quels noms connait excel?
Comment j'interroge la procédure Changergraine? et quand j'y serai je lui demande comment de créer un nom;
est-ce quelque chose comme cela? ""créer un nom de graine"" 17h22 lundi semaine 5.
Merci
 
La première procédure du poste #24 crée 4 noms qui, après, seront connus d'Excel : Toto, Titi, Tata et Tutu.
Elle utilise pour cela 4 fois la procédure ChangerGraine. Celle ci ne s'interroge donc pas: on l'invoque pour qu'elle crée des noms connu d'Excel dans le gestionnaire de noms ou pour changer les valeurs auxquelles ils correspondent s'ils existent déjà.
Ces noms pourront ensuite être utilisés comme graines en troisième paramètre de la fonction Hasard.
 
Dernière édition:
Bonjour,
dans un nouveau module standard j'ai écrit:
Sub
Changer les graines()

Changer graine "Pointeurs"
Changer graine "Milieux"
Changer graine "Tireurs"
End Sub

Si je remplace 1,23456789 en 3ème position de la fonction hasard (exemple =Hasard(LIGNE()-3;$AM$4:$AM$67; pointeurs) j'obtiens un message d'erreurs et ca me renvoie sur mon module avec le message erreur de compilation, attendu: identificateur; Que faire?
Est-ce lié au poste #24 et à ses procédures et où se trouve ce poste #24?
Merci
 
Bonjour.
L'avez-vous exécutée, au moins votre procédure ?
Ça m'étonnerait vu que vous montrez un nom incorrect muni d'espaces et qui n'est même pas sur la même ligne que l'instruction Sub. Appelez la ChangerLesGraines en un seul mot, et affectez la à un bouton de formulaire pour pouvoir l'exécuter à tout moment. Pareil, c'est la Sub ChangerGraine qui doit être utilisée, pas Changer graine.
 
Dernière édition:

Bonsoir,
On y est presque; je vous joins 2 fichiers pratiquement identiques: dans essai1 la formule avec en 3ème position de la fonction hasard les termes Pointeurs et Tireurs colonnes AI et AN (exemple cellule AN4 =Hasard(LIGNE()-3;$AM$4:$AM$67;Pointeurs) cela fonctionne. dans Essai2 pas le résultat attendu et je ne vois pas pourquoi.
Merci
 

Pièces jointes

- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…