Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme Excel VB lors du rafraichissement

Function personnelle

    3 mai 2011 à 21:19:33

    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) :
    Image utilisateur

    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,
    • Partager sur Facebook
    • Partager sur Twitter

    Probleme Excel VB lors du rafraichissement

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown