Erreurs dues à versions d'Excel différentes

Y compris Power BI, Power Query et toute autre question en lien avec Excel
g
gpk2013
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 août 2013
Version d'Excel : 2010 FR

Message par gpk2013 » 7 novembre 2016, 13:35

Hello tout le monde !

J'ai développé des feuilles Excel avec macros en Excel 2010, mais sur des PC plus récents (j'ai testé sur un Excel 2013 et un autre en 2016) ça se met à renvoyer des erreurs bizarres (voir image 1)

Pourtant mon code semblait à priori pas trop compliqué, et marchait dans Excel 2010... (voir image 2)

J'ai une formule Combi_equation, qui rassemble pas mal de variables pour établir une équation qui doit être implantée ensuite dans une case de la feuille Excel, tout ça avec des boucles.
Là où ça bugge c'est lors de l'implantation dans la feuille excel. J'ai essayé plus simplement qu'avec le With Selection (qui me permet de bidouiller le format en même temps), mais c'est l'assemblage du "=" et du Combi-equation qui ne lui plait pas...

Quelqu'un aurait déjà rencontré ce type de problèmes en passant d'une version d'Excel à une autre ? J'ai l'impression que pour chaque document programmé sur une ancienne version et comportant des macros je vais avoir ce type de problèmes en passant à un Excel 2016... Quand ce sont juste des variables non déclarées (les Excel récents ont l'air plus pointilleux là dessus) ça passe on peut facilement remédier, mais là je suis un peu perdu...
Impression ecran bug.jpg
Impression ecran bug.jpg (30.86 Kio) Vu 178 fois
Impression ecran bug 2.jpg
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 novembre 2016, 13:42

Ton séparateur décimal apparaît être la virgule dans Combi_equation ! Une formule passée avec la propriété Formula exige le point comme séparateur décimal.

NB- Les éléments de la formule *0 pourraient être éliminés, le résultat est connu ! :lol:

Cordialement.
g
gpk2013
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 août 2013
Version d'Excel : 2010 FR

Message par gpk2013 » 8 novembre 2016, 09:53

Très juste, c'est bien la virgule la source du problème !! J'ai résolu en changeant tous les "," par des ".", mais ça encore c'est une aberration, dans le traitement de texte le "." du pad numérique est dorénavant traité comme ".", dans Excel comme ",", et dans VBA comme "."... Pourquoi ils font des changements inutiles d'années en année ???

Donc comme mon opérateur (qui peut très bien être moi !!) est faignant, il tape des chiffres du genre "1.35" dans la feuille Excel, ça écrit "1,35", et quand VBA l'extrait il garde "1,35" et donc bugge dans ma formule Combi_equation... Grrrrr !!! :oops: :oops: :oops:

La solution que je pensais avoir trouvé était d'enregistrer une macro pour remplacer les "," par des ".", mais même en l'enregistrant, ça bugge quand je la fais tourner en automatique (c'est même ça le plus frustrant, il n'arrive pas à refaire tourner un truc qu'il a lui même enregistré...) :
    Range("A1:N43").Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 8 novembre 2016, 10:01

Bonjour,

1) Je ne rappelle pas ce que je pense dès que je vois un Select dans un code (sans parler du reste !) :D VBA mérite d'être moins maltraité.

2) Depuis de longues années la touche . (point) du pavé numérique insère le séparateur décimal défini dans les options régionales.

3) Pourquoi, dès lors que l'on utilise VBA, s'en servir pour mettre une formule plutôt que le résultat du calcul.

Cordialement.
g
gpk2013
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 21 août 2013
Version d'Excel : 2010 FR

Message par gpk2013 » 8 novembre 2016, 10:30

Merci pour ta réponse !

1) Je ne connais pas de moyen plus simple, c'est ce que la macro m'a enregistré... J'essaye juste de la faire tourner telle qu'elle et ça ne marche même pas :( :(

2) Ah ok, c'est un peu bizarre d'avoir cette différence de traitement d'une même touche entre Word, VBA, Excel.... Pour ma part j'essaye de faire un fichier qui convient sans faire changer à l'utilisateur ses options régionales, etc, c'est mon fichier qui doit tenir compte des spécificités sans que ça le fasse bugger...

3) J'utilise VBA comme un outil de calcul, le but est que l'utilisateur qui utilise le fichier (et qui maîtrise encore moins VBA que moi) remplisse les cases modifiables de la feuille, fasse différents choix avec des boutons et que VBA traite tout ça pour donner des résultats dans les cases de la feuille sous forme de formules (comme Combi_equation), qui seront donc mises à jour si l'utilisateur change les valeurs des cases modifiables (ce qui ne serait pas le cas si VBA met directement le résultat)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 8 novembre 2016, 15:09

Un code qui sort de l'enregistreur est par définition mauvais, ce n'est que l'enregistrement des mouvements manuels que VBA n'a justement pas besoin d'accomplir. La première chose à apprendre et à faire est de réécrire tout code enregistré pour en supprimer les Select, Selection, Activate... et des éléments inutiles correspondant à des paramètres par défaut qui n'ont pas été modifiés...

On passe toujours moins de temps à insérer une formule manuellement qu'à vouloir le faire par VBA... En tout état de cause, dans ton cas la méthode d'insertion utilisée n'est pas la bonne : on insère des nombres directement, ou en faisant appel à des références ou en les traitant en tant que chaînes (une formule est une valeur de type String lors d'une insertion traitée en VBA).
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message