IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Séparateur de décimal dans FormulaR1C1 et grande detresse psychologique !


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Séparateur de décimal dans FormulaR1C1 et grande detresse psychologique !
    Bonjour a tous,
    ça ne m'arrive pas souvent mais la je pète un boulon devant mon écran depuis hier soir....
    J'ai besoin de votre aide sur une macro.

    Voila le soucis :
    -Input -> une cellule avec un nombre qui peut avoir des décimale
    -je vais récupérer cette valeur que je met dans une variable "Double" que j'utilise ensuite dans une FormulaR1C1
    -Avec cette façon de faire la plage résultante de cette formule me donne une valeur de type "42;32" alors que l'entré est "42,32".
    -Le point-virgule n'a rien à faire la et je comprend (après 2 heure...) qu'il s'agit d'un problème de conversion du séparateur de décimale "," vers "."

    Ok pas de soucis suffit donc de convertir la virgule dans ma variable en un points. La sa commence a coincé... Après un longue (très longue... trop longue...) séance de bidouillage j'arrive a obtenir ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=MAX(RC[-28]-RC[-27], " & Replace(Cloture, ",", ".") & ")"
    ou ma valeur d'entré a été mis dans la variable "Cloture" puis la "," remplacé par un "."

    Le truc c'est que cette formule est vachement simplifié et que la variable "Cloture" je vais l'utiliser 50 fois au moins. Pour éviter les erreur de frappe et une meilleur lisibilité j'ai voulu SORTIR de ma formule " & Replace(Cloture, ",", ".") & ")" pour faire plus propre et la pas moyen....

    j'ai tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Cloture.Value = Replace(Cloture, ",", ".")
    Cloture = 1 * " & Cloture & "
    Cloture = "(" & Replace(Cloture, ",", ".") & ")"
    Cloture= Replace(Cloture, ",", ".")
    etc...

    rien ne fonctionne . Quelqu'un saurait me dire la façon d'utiliser Replace() pour une variable ? Je ne peut pas modifier l'affichage de ma feuille donc je doit garder des virgule en entré et il me faudrais juste une façon de convertir definitivement (même en mode gros bourrin) une variable double avec une virgule en une variable double avec un point sans perdre les information (nombre de décimale dans la cellule pouvant varier).

    merci mille fois de votre aide. Je part me pendre et je reviend.

    PS le code au cas (qui marche sans problème)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub ADX()
     
    Dim DerniereLigne As Long
     
    'va chercher la valeur de la periode
    Dim Periode As Double
    Dim F4 As Worksheet
    Set F4 = Worksheets("Download")
    Periode = F4.Range("P18").Value
     
    'va chercher la valeur cloture
    Dim Cloture As Double
    Dim F6 As Worksheet
    Set F6 = Worksheets("Veille")
    Cloture = F6.Range("H65536").End(xlUp).Value
     
     
    'recupere le nombre de ligne remplie
    DerniereLigne = Range("A1").End(xlDown).Row
     
    'Aller à la dernière remplie
    [A65536].End(xlUp).Select
     
    'Aller a la cellule 32 , c'est a dire colonne AF "TR"
    Cells(ActiveCell.Row, 32).Select
     
    If DerniereLigne < 2 Then
    ActiveCell.FormulaR1C1 = ""
     
    Else
     
    ActiveCell.FormulaR1C1 = "=MAX(RC[-28]-RC[-27], " & Replace(Cloture, ",", ".") & ")"
     
    End If
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    Ton soucis est bien un problème de conversion mais pas tout à fait celui auquel tu penses.

    En fait, tu déclares cloture en tant que double (variable numérique donc). Or, la fonction replace ne fonctionne que pour des chaines de caractères. Du coup, tu ne peux pas utliser replace avec cloture.

    Pour éviter cela, il faut que tu convertisses cloture en string, puis tu utilises replace sur ta string puis tu reconvertis en double.

    Autre solution, modifier dans les paramètres le séparateur décimal.
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Personnellement, je n'arrive pas a reproduire ton probleme. Ton code fonctionne bien.

    Pourrais-tu envoyer un mini fichier qui produit ton resultat bizarre?
    Cordialement

    Docmarti.

  4. #4
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    merci pour l'aide . Effectivement je ne savais pas pour le type de conversion de Replace ! Du coup sa risquais pas de fonctionner.
    Je vais donc faire cette conversion et je vous dirais ce que ça donne.

    Docmarti le code fonctionne très bien c'est sortir le bout de formule avec Replace () en gras que je n'arrive pas faire
    Integrer dans le code pas de soucis mais dès que je souhaite le faire sortir pour pouvoir ensuite le réutiliser plus simplement que de mettre des Replace partout dans mes formules que ça bloque

    Je vais test la conversion de variable du coup

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour sortir Replace de la formule, c'est facile. Tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    clot = Replace(Cloture, ",", ".")
     
    ActiveCell.FormulaR1C1 = "=MAX(RC[-28]-RC[-27], " & clot & ")"
    Cordialement

    Docmarti.

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Je ne comprend plus la....
    J'ai fait la conversion mais il bloque a présent sur la conversion du string en double...
    --> "Erreur d'execution incompatibilité de type"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    'va chercher la valeur de cloture
    Dim Cloture As Double
    Dim F6 As Worksheet
    Set F6 = Worksheets("Veille")
    Cloture = F6.Range("H65536").End(xlUp).Value
     
    'conversion en string
    Dim Conversion As String
    Conversion = CStr(Cloture)
     
    'remplacement virgule en point
    Conversion = Replace(Conversion, ",", ".")
     
    'convesrion en Double
    Cloture = CDbl(Conversion)

    Docmarti j'ai test ta solution de sortie ... ET SA MARCHE !!!!!!!!!!!!!!!!!!!!!!!!!!!!! je ne comprend pas... Tu verra sur mon 1er message que j'avais tester cette solution... Peut tu me dire de quelle type est Clot du coup ??? Je comprend pas parce que j'avais mis Cloture= Replace(Cloture, ",", ".") et ça ne machais pas ??


    Merci de votre aideen tous cas. Je vais tester avec des formule un peu plus complexe et je mettrais résolu ensuite .

    Encore merci !

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par pyriame Voir le message


    Docmarti j'ai test ta solution de sortie ... ET SA MARCHE !!!!!!!!!!!!!!!!!!!!!!!!!!!!! je ne comprend pas... Tu verra sur mon 1er message que j'avais tester cette solution... Peut tu me dire de quelle type est Clot du coup ??? Je comprend pas parce que j'avais mis Cloture= Replace(Cloture, ",", ".") et ça ne machais pas ??
    Mon Clot est du type Variant car je ne l'ai pas declare avec Dim Clot as Double ou Dim Clot as String.

    Toi, tu as declare Cloture du type Double. Donc Cloture ne peut contenir qu'une valeur numerique, par exemple "1,23" avec une virgule comme separateur decimal.
    Mais si tu remplaces la virgule par un point, ca donne "1.23" qui n'est plus une valeur numerique. C'est pour ca qu'une erreur se produit quand tu fais Cloture= Replace(Cloture, ",", ".")

    Etudie ce tutoriel sur les variables.
    Cordialement

    Docmarti.

  8. #8
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    OK merci.
    Oui j'avais bien compris le passage sous forme de string et j'ai reessayer avec une autre formule c'est très étrange. Quant il s'agit d'une conversion pour faire des switch entre version US et française c'est un peu la guerre (si j'avais su je serai rester dès le début en format US avec les points mais bon....).

    Je serais pas trop la façon de l'expliquer mais excel envoi la valeur de la variable de façon "brut" un peu comme un copier coller idiot ou il se contente de lacher sur la cellule une suite de symbole et c'est une fois le "paquet" dans la cellule qu'il travail.

    ex : avec une variable type Slow = 2 / (30 + 1) que tu met dans une formule, te donne dans la cellule quant tu clic dessus =PUISSANCE(BC69*(0,6666667 - 0,06451613)+0,06451613; 2). Et la j'ai utiliser une variable en entré type single en mode double on se retrouve avec du 0.06451612903.....

    1) Je sais pas jusqu'ou les chiffres après la virgule peuvent aller mais pas faut lui mettre une variable type = 1/3 sinon bonjour...
    2) Je me demande si les calcul sont pas dans ce genre de cas de figure notoirement allongé.

    Je pensais qu'après une conversion (c'est a dire en mettant un point) et en typant la variable de réception excel était a nouveau capable de comprendre qu'on était plus sur un string et envoyer des arrondi voir faire immédiatement le calcul avant d'afficher la formule

    Bref ça me semble un peu étrange . Encore merci!

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Je n'ai pas trop compris tes dernieres questions.

    Mais pour en terminer avec l'ecriture d'une formule :

    Pour mettre une formule dans une cellule, VBA nous offre le choix entre 4 syntaxes ( 2 locales et 2 americaines). On choisit celle qu'on prefere.
    Pour savoir comment l'ecrire, on regarde ce que nous donne le contenu des proprietes Formula ou FormulaLocal ou FormulaR1C1 ou FormulaR1C1Local.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    clot = Replace(Cloture, ",", ".")
    ActiveCell.FormulaR1C1 = "=MAX(RC[-28]-RC[-27], " & clot & ")"
     
    ActiveCell.FormulaR1C1Local = "=MAX(LC(-28)-LC(-27); " & Cloture & ")"
     
    Debug.Print ""
    Debug.Print "Syntaxes americaines"
    Debug.Print ".Formula = " & ActiveCell.Formula
    Debug.Print ".FormulaR1C1 = " & ActiveCell.FormulaR1C1
    Debug.Print ""
    Debug.Print "Syntaxes locales"
    Debug.Print ".FormulaLocal = " & ActiveCell.FormulaLocal
    Debug.Print ".FormulaR1C1Local = " & ActiveCell.FormulaR1C1Local
    Cordialement

    Docmarti.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [X10-win10-sqlite-ios]Séparateur décimale dans un asfloat
    Par mario9 dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/11/2015, 22h24
  2. [Débutant] Séparateur décimale dans paramètres
    Par kameth dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/08/2015, 23h22
  3. [WD12] Séparateur décimal dans une table
    Par devste dans le forum WinDev
    Réponses: 3
    Dernier message: 16/01/2009, 17h20
  4. Séparateur décimal dans une formule
    Par Tonton Phil dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2007, 11h45
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo