none
Rafraissiement Excel bloquant ma function()

    Discussion générale

  • Bonjour à tous,

     

    Devant la pertinance des réponses reçues lors de ma dernière question j'ai décidé de vous soumettre un autre problème.

     

    Je viens de créer un complément .xlma ajoutant une nouvelle fonction à Excel : ConversionFrtoEng. Son but étant de convertir un chiffre en format anglais les chiffres saisit en français (langue de mon système). Cela marche très bien (grâce à vous, alors déjà MERCI). Cette fonction se compose de deux arguments : le nombre francais et (optionnel) le nombre de décimal souhaité. Si aucun chiffre rentré en décimal alors on considère que c'est 0 et si le nombre de décimal demandé est supérieur à 2 on limite à deux.

    Voici mon code (qui marche très bien) :

    Function ConversionFRtoENG(Nbrfrancais, Optional Nbrdedecimal As Integer = "0")
    
    'Fonction créée par Marcellin Nachin le 25 avril 2011
    ' Objectif : Convertir des chiffres aux formats francais en chiffres (stockés en texte)au format anglais
    
    ' Function déclare une fonction puis le nom de la fonction. Entre paranthèse Nbr Français est le premier argument
    'obligatoire à saisir, puis Optional déclare les arguments optionels qui sont toujours placé à la fin
    'ensuite NbrDecimal est le nom de l'argument facultatif As String donne le type de variable : String :
    'chaine de caractère non numérique puis ="2" donne la valeur du champs si non renseigné
    
    If Nbrdedecimal >= 2 Then 'si le nombre de décimal sup ou = 2
    If Nbrfrancais = 0 Then 'si le chiffre vaut 0
    ConversionFRtoENG = "- " 'On le remplace par untiret suivi d'un espace pour créer l'alignement des chiffres négatifs
    
    ElseIf Nbrfrancais > 0 Then 'si le chiffre > 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "#,##0.00_)") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    ConversionFRtoENG = Replace(transf0, ". ", " ") 'on remplace les points espaces par des espaces
    
    ElseIf Nbrfrancais < 0 Then 'si le chiffre < 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "(#,##0.00)") 'si le chiffre < 0
    transf1 = Replace(transf0, "-", "") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    transf2 = Replace(transf1, " ", ",") 'on remplace les espaces par des virgules
    ConversionFRtoENG = Replace(transf2, ".)", ")") 'on remplace les pointferm parenthèse par des ferm parenthèse
    End If
    End If
    
    If Nbrdedecimal = 1 Then 'si le nombre de décimal = 1
    If Nbrfrancais = 0 Then 'si le chiffre vaut 0
    ConversionFRtoENG = "- " 'On le remplace par untiret suivi d'un espace pour créer l'alignement des chiffres négatifs
    
    ElseIf Nbrfrancais > 0 Then 'si le chiffre > 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "#,##0.0_)") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    ConversionFRtoENG = Replace(transf0, ". ", " ") 'on remplace les points espaces par des espaces
    
    ElseIf Nbrfrancais < 0 Then 'si le chiffre < 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "(#,##0.0)") 'si le chiffre < 0
    transf1 = Replace(transf0, "-", "") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    transf2 = Replace(transf1, " ", ",") 'on remplace les espaces par des virgules
    ConversionFRtoENG = Replace(transf2, ".)", ")") 'on remplace les pointferm parenthèse par des ferm parenthèse
    End If
    End If
    
    If Nbrdedecimal = 0 Then 'si le nombre de décimal = 0
    If Nbrfrancais = 0 Then 'si le chiffre vaut 0
    ConversionFRtoENG = "- " 'On le remplace par untiret suivi d'un espace pour créer l'alignement des chiffres négatifs
    
    ElseIf Nbrfrancais > 0 Then 'si le chiffre > 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "#,##0_)") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    ConversionFRtoENG = Replace(transf0, ". ", " ") 'on remplace les points espaces par des espaces
    
    ElseIf Nbrfrancais < 0 Then 'si le chiffre < 0
    transf0 = WorksheetFunction.Text(Nbrfrancais, "(#,##0)") 'si le chiffre < 0
    transf1 = Replace(transf0, "-", "") 'On utilise la fonction texte d'Excel pour lui appliquer un calque
    transf2 = Replace(transf1, " ", ",") 'on remplace les espaces par des virgules
    ConversionFRtoENG = Replace(transf2, ".)", ")") 'on remplace les pointferm parenthèse par des ferm parenthèse
    End If
    End If
    
    
    End Function
    
    

     

    J'utilise ce complément avec Excel 2007. Nous possédons dans mon entreprise un logiciel financier étant un mix d'excel et de word. Je peux donc appeler ce composant depuis cette application puisque c'est du Excel. Par contre quand je sauve mon fichier avec cette application cela rafraichit mes formules et Excel décide de reprendre lui même en main les décimal (exemple en image) :  http://img11.hostingpics.net/pics/235937exemple.jpg

     

     

    Avez-vous une idée de comment bloquer l'effet du rafraichissement? Est ce mon code qui est mal fait?

     

    Merci de votre aide,

     

    Bonne journée,

     

    • Type modifié Ciprian DuduialaOwner jeudi 18 août 2011 07:28 pas de réponse de l'utilisateur qui a lancé la question
    mardi 3 mai 2011 19:33

Toutes les réponses