|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Bonjour à toutes et tous,
Dans une macro toute simple, je fais définir par les utilisateurs une devise, qu'ils sont libres de rentrer via une InputBox. J'ai nommé cette variable Curr. Elle me permet par la suite dans une succession de formule de remplacer des vides par cette variable. Problème, lors de l'exécution de la macro, au lieu de voir la réponse entrée (par ex. "EUR"), Excel me renvoie #NOM. Ci-dessous le code entré : Code :
PS: J'aurai d'autres questions (deux je pense) par la suite mais je ne veux pas vous embrouiller et vous remercie déja par avance pour celles que vous pourrez me donner pour ce souci là.
__________________
Cordialement, Runsh |
||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
C'est parce que la partie Excel qui évalue les formules de cellules ne sait absolument pas ce qu'est 'Curr'!
Essaie peut-être de lui donner une portée 'Public' pour voir si elle est reconnue (il me semble que l'on peut définir des fonctions en VBA et les appeler depuis la formule d'une cellule donc ça doit être possible avec des variables). Sinon, le plus simple serait peut-être de faire entrer la devise dans une case de ta feuille et d'utiliser une formule classique. Et avec un 'If...Then', c'est faisable également en VBA. Au fait, la ligne suivante n'a aucune utilité: Tu affectes à ta cellule la valeur qu'elle contient déjà! |
|
|
00
|
|
|
#3 | |
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Merci pour ta réponse Sclarckone, je vais donc ramener la variable dans une cellule et l'utiliser ensuite. Cependant, je ne suis pas d'accord avec toi sur
Citation:
Ce .Value = .Value me permet de faire un copier / coller en valeur en gros. Si tu as une autre solution pour un même résultat, je suis preneur ! Vous saluant bien bas
__________________
Cordialement, Runsh |
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Je comprends mais c'est exotique en tout cas!
Ça implique en tout cas que dans le modèle objet d'Excel, le résultat d'une formule est différent de la propriété Value...je serai curieux de savoir comment ça marche exactement. |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 692 ![]() |
Bonjour,
As-tu essayé avec Code :
.Formula = "=IF(LEFT(RC[-11], 5)<>""Solde"", RC[-8],""" & Curr & """)" |
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2005 Messages : 3 ![]() |
Bonjour,
Excel te renvoie #NOM, car il cherche un Nom définie dans le classeur ainsi:"Curr" qui n'existe pas. Essaie de remplacer ta formule: Code :
"=IF(LEFT(RC[-11], 5)<>""Solde"", RC[-8], Curr)" Code :
"=IF(LEFT(RC[-11], 5)<>""Solde"", RC[-8]," & Curr & ")" ça devrait marcher. Tiens moi au courant. Cordialement, Octaves. |
|
|
00
|
|
|
#7 | ||
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Bonjour Octaves, bonjour gFZT82,
Merci à tous les deux pour vos réponses, j'ai testé les deux et c'est celle de gFZT82 qui fonctionne parfaitement. Je vais continuer à profiter de vos connaissances pour parfaire ma macro. Je souhaiterai "vérouiller" la devise entrée par les utilisateurs finaux afin qu'ils ne rentrent pas n'importe quoi. Comme ensuite je compile plusieurs fichiers, il faut absolument que la devise entrée dans l'InputBox soit composée de 3 caractères, qui ne peuvent être qu'alphabétique. Pour l'instant, mon code se résume au plus simple, à savoir : Code :
J'espère que ma demande est suffisament claire. Je vous remercie par avance ! Au fait Sclarckone, c'est exotique sûrement mais je vais t'avouer, je ne fais qu'appliquer bêtement cette solution que m'a un jour donné mercatog dans un bout de code qu'il m'a corrigé. Etant donné qu'il maîtrise plus que bien, je ne me suis jamais essayé à faire autre chose...
__________________
Cordialement, Runsh |
||
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Et tant que ça fonctionne il n'y a pas de raison de se priver. Surtout que du coup c'est beaucoup plus rapide que de se taper la collection de cellules et définir les valeurs unes à unes...
Pour ton problème de saisie de devise, je te conseille de t'intéresser aux expressions régulières qui te permettront de résoudre très simplement ton problème: http://cafeine.developpez.com/access/tutoriel/regexp/ |
|
|
00
|
|
|
#9 | ||
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Re Scklarckone,
Merci pour ton lien , ça m'a aidé à débroussailler un peu tout ça.En y allant pas à pas, j'ai réussi au résultat escompté pour la première partie (la plus simple), à savoir contrôler qu'il y ait bien trois caractères. Ensuite, j'ai tenté d'intégrer le contrôle de ces caractères pour déterminer si oui ou non ils sont bien alphabétiques, mais ça ne fonctionne pas et ça me fait tout planter. Ci-dessous le code utilisé. Je vous demande d'être indulgent, j'imagine que c'est très sioux mais vos réponses (j'espère !) m'aideront à le simplifier et le rendre plus propre : Code :
Je vous remercie d'avance pour votre contribution !
__________________
Cordialement, Runsh |
||
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Tu n'as pas du tout utilisé d'expressions régulière en tout cas! C'est pas obligé mais c'est très puissant une fois qu'on les maitrise (ce qui n'est pas mon cas malheureusement).
Le plus simple pour être sûr que la devise est en majuscules (pas besoin de test): |
|
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Mince, je suis pris !
En effet, je n'ai pas utilisé d'expressions régulières car bien qu'ayant lu le tutoriel (qui m'a donné la piste du (A - Z)), je n'ai pas compris, je ne maîtrise pas du tout VBA (je fais ma petite tambouille de débutant). Merci pour ton code sur la façon de transformer en majuscule la variable si toutefois cette dernière était entrée en minuscule. Aurais-tu une idée de la façon de faire mon contrôle sur le type de caractère entré par l'utilisateur (en l'occurence de l'alphabétique) ? Merci !
__________________
Cordialement, Runsh |
|
|
00
|
|
|
#12 | |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Un tuto qui en explique bien le principe (mais en PHP donc la syntaxe doit légèrement différer en VBA): http://g-rossolini.developpez.com/tutoriels/php/regex/ Sinon faudrait que quelqu'un qui connait la syntaxe en VBA te file un coup de main... |
|
|
|
00
|
|
|
#13 |
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Je suis long à la détente... Excuse-moi pour avoir redemandé ce à quoi tu avais déja répondu. Merci pour tous tes liens je vais essayer de trouver une parade à tout ça, déja comprendre les tutos.
Encore merci pour ton aide, au plaisir d'une prochaine discussion !
__________________
Cordialement, Runsh |
|
|
00
|
|
|
#14 | ||
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Sclarckone,
A force de tâtonnement, j'ai fini par arriver au résultat escompté. On peut probablement trouver des raccourcis mais je te donne pour info le code qui me convient et répond à mon problème : Code :
__________________
Cordialement, Runsh |
||
|
|
00
|
|
|
#15 | ||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Oui mais à ceci près que ton code est pris en défaut si l'utilisateur entre des caractères du style ?/:;,."#~& ...
M'enfin faudrait tomber sur un vicieux. Bon courage! Juste pour chipoter: Code :
Code :
Curr = UCase(InputBox("Quelle est la devise locale de la société dont vous traitez les données ?", "Définition de la devise locale")) |
||
|
|
00
|
|
|
#16 |
|
Membre éprouvé
![]() Duc Nihiliste Inscription : mars 2011 Messages : 395 ![]() |
Entièrement d'accord avec toi, faudrait tomber sur un vicieux (ou un abruti !) mais je ne pense pas que ce soit le cas. Je pense même que le contrôle des valeurs numériques est de trop mais on ne sait jamais...
Merci pour le raccourci, j'aurai pu faire l'effort de concaterner les deux opérations en une seule en effet !
__________________
Cordialement, Runsh |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com