[Catégorie modifiée .Net -> VBA] Rafraichissement Excel VBA

marcellin54 Messages postés 5 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 3 mai 2011 - 3 mai 2011 à 21:25
marcellin54 Messages postés 5 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 3 mai 2011 - 3 mai 2011 à 22:08
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) :




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,

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 mai 2011 à 21:58
Salut

Dommage que tu n'aies pas choisi la bonne catégorie pour ta question.

If Nbrdedecimal >= 2 Then
    ' Le nombre est supérieur ou égal à 2. Ok
    If Nbrfrancais = 0 Then  
        ' Je vois mal comment il pourrait être égal à 0
    ElseIf Nbrfrancais > 0 Then
        ' code
    ElseIf Nbrfrancais < 0 Then
        ' Je vois mal comment il pourrait être inférieir à 0
    End If
End If
Il faut revoir ta structure de If-Then-Else
Pense à utiliser l'indentation (*), ça aide graphiquement.
(*) Décalages grâce aux tabulations en début de ligne
0
marcellin54 Messages postés 5 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 3 mai 2011
3 mai 2011 à 22:08
NbrFrançais étant un chiffre il peut être nul (égale à 0) ou négatif.... je ne comprends donc pas trop ce commentaire.... par contre en effet ce n'est pas très visuel je te l'accorde mais c'est mes débuts
0
Rejoignez-nous