XL 2019 VBA Evaluate : #Erreur

Cheyenne_2021

XLDnaute Junior
Bonjour,



J’ai fait un graphique (Onglet Semaine du 2 nov), je voudrais qu’il se construise de façon automatique (vba : Module Choix_sem).

J’ai 2 problèmes :

Position : Je dois trouver un n° au hasard entre -3 et 3

J’ai essayé :

  • Evaluate("=ALEA.ENTRE.BORNES(-3;3)") : Erreur #VALEUR
  • Evaluate("=if([T_2Nov[position]].Rows(1)=0;1;2") : Erreur #VALEUR


  • Une formule qui concatène le nom de l’évènement et la date
  • Avec excel =[@evènement]&CAR(10) & TEXTE([@[date debut]];"jjmm") : OK
  • Avec vba : Evaluate =(« =[@evènement]&CAR(10) & TEXTE([@[date debut]];"jjmm") ») : : Erreur #VALEUR


Je ne sais pas du tout comment m’en sortir.
Merci,
 

Pièces jointes

  • Test calendrier 21-22 Test chronologie v 34.2.xlsm
    704.1 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Bonjour.
Evaluate pour des expressions mettant en œuvre des fonctions Excel les requiert en anglais, et avec ',' comme séparateur d'arguments. Le signe égal n'est pas utile mais ne gène peut être pas. Pour tout ce qui dérive d'aléat je préfère des expressions purement VBA basées sur Rnd. Une instruction Randomize devant assure des séquences différentes à chaque exécution. On ne peut, dans les expressions à évaluer, mentionner de propriétés ni méthodes. Tout au plus peut on en déduire une valeur y étant concaténée. Au lieu de B = Evaluate("=if((T_2Nov[position]).Rows(1)=0,1,2") j'aurais peut être mis B = IIf([T_2Nov[Position]].Rows(1).Value = 0, 1, 2)

En résumé: vous essayez plus souvent que judicieux d'utiliser Evaluate pour retrouver la même chose qu'une formule Excel.
Evaluate("=[@evènement]&CAR(10)&TEXTE([@[date debut]];"jjmm")") Non ! Éventuellement :
[T_2Nov[evènement]].Row(1).Value & vbLf & Format([T_2Nov[date debut]].Row(1).Value, "ddmm")
 
Dernière édition:

Cheyenne_2021

XLDnaute Junior
#Dranreb
avec RND je n'ai pas trouvé comment trouver des chiffres négatifs, ou plutôt comment avoir des chiffres dans des bornes, par exemple de -3 à 3 ?
Int(3 * Rnd) - 3 : ne donne que des chiffres negatifs
Int(3 * Rnd) +1 : ne donne que des chiffres positifs

Et pour cet evaluate : [[@evènement]&CAR(10)&TEXTE([@[date debut]],"jjmm")] , j'ai essaye de remplacer le ; par une virgule mais cela ne fonctionne pas.
Merci
 

Dranreb

XLDnaute Barbatruc
Essayez Int(Rnd * 7 - 2.5)
Le deuxième ne va pas parce qu'il n'existe pas de ligne courante du tableau (celle portant la formule qui n'existe forcément pas ici) permettant d'interpréter le '@' comme désignant cette mystérieuse ligne, et de plus on ne sait même pas de quel tableau il s'agit, pour la même raison. Et c'est pas TEXTE mais TEXT en anglais, ni CAR mais CHAR. Non vraiment c'est souvent plus simple de mettre au point une expression VBA qui fait la même chose.
 
Dernière édition:

Cheyenne_2021

XLDnaute Junior
Suite à vos remarques, j'ai cherché différemment et j'ai trouvé une solution.

VB:
For r = 1 To [Année].Rows.Count
    A = [Année[Semaine  début (N°)]].Rows(r)
    'MsgBox ("a : " & A)
    If [Num_semaine] = [Année[Semaine  début (N°)]].Rows(r) Then
        [T_2Nov].ListObject.ListRows.Add (1)
        [T_2Nov[evènement]].Rows(1) = [Année[Nom Evt]].Rows(r)
        
        [T_2Nov[date debut]].Rows(1) = [Année[date début]].Rows(r)
        
          [T_2Nov[position]].Rows(1) = Int(7 * Rnd) - 3
          If [T_2Nov[position]].Rows(1) = 0 Then        ' pour ne pas avoir d'étiquettes sur la ligne 0
            'MsgBox ("ligne à 0")
            [T_2Nov[position]].Rows(1) = 1
          End If
        
        
         B = [Année[Nom Evt]].Rows(r)
         B2 = [Année[date début]].Rows(r)
         B3 = Format([Année[date début]].Rows(r), "dd/mm")
         [T_2Nov[evt_date]].Rows(1) = B & Chr(10) & B3
        l = l + 1
     End If
 Next r

Merci
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi