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 :

Affecter une valeur à un tableau via Formula (FormulaLocal)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut Affecter une valeur à un tableau via Formula (FormulaLocal)
    Bonjour,

    J'ai besoin d'effectuer un arrondi au plus proche.
    J'ai vu su le forum que la fonction VBA renverait 0 pour 0.5 et que la foncion Excel renverait 1 pour 0.5 (en arrondissant à l'unité).

    J'ai donc voulu passer par les formules excel pour effectuer mon arrondi.
    L'objectif est d'appliquer un autre code, mais j'effectue des tests étapes par étapes

    Etape 1 : Utiliser Formula
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro3()
        Dim i As Integer
     
        For i = 4 To 59
            Cells(i, 7).FormulaLocal = "=ARRONDI(" & Cells(i, 1) & ";1)"
        Next
     
    End Sub
    Etape 2 : Améliorer la portabilité
    Premier petit problème lorsque j'écris par soucis de portabilité du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 7).Formula = "=ROUND(" & Cells(i, 1) & ";1)"
    J'ai une erreur définit par l'application ou par l'objet.


    Etape 3 : Attribuer les valeurs à un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro3()
        Dim i As Integer
        Dim Tablo(55) As Double
     
        For i = 4 To 59
            Tablo(i - 4).FormulaLocal = "=ARRONDI(" & Cells(i, 1) & ";1)"
            Cells(i, 7) = Tablo(i - 4)
        Next
     
    End Sub
    L'erreur renvoyer est "Qualificateur Incorrect" sur la ligne Tablo(i-4)...

    Alors est-ce possible de réaliser cette procédure sur VBA?
    J'aurais le même résultat entre étape 1 et 3 mais mon but est d'ensuite appliquer la structure de l'étape 3 à un autre code.


    Si vous avez des solutions pouvant m'éclairer, je vous remercie d'avance

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour,
    curseur placé sur la propriété FormulaLocal, appuyer sur la touche

    Et là on vérifie sur quoi elle peut s'appliquer : un objet Range mais certainement pas une variable tableau …

    Astuce :
    entrer manuellement une formule dans une cellule. Une fois au point, pour voir son écriture en VBA natif,
    lire la propriété Formula de la cellule, par exemple dans la fenêtre exécution : ? activecell.formula
    Là on s'aperçoit que le ";" en saisie d'une cellule d'une version française devient une "," dans la version native !

    Et ne pas oublier de préciser la propriété Address pour référencer une cellule …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Je te remercie pour ces précisions !
    J'ai finalement utilisé une troncature (RoundDown) dans mon code.

    Mais le problème de l'étape 2 était effectivement du au ";" "," et Address.

    Pour ceux qui tomberait sur le même problème, récapitulatif de ce qui fonctionne ou pas
    Fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 4 To 59
            Cells(i, 7) .FormulaLocal = "=ARRONDI(" & Cells(i, 1) & ";1)"
        Next

    Ne fonctionne pas (sans Address et à cause du ";")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 4 To 59
            Cells(i, 4).Formula = "=ROUND(" & Cells(i, 1) & ";1)"
        Next

    Ne fonctionne pas (sans Address)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 4 To 59
            Cells(i, 4).Formula = "=ROUND(" & Cells(i, 1) & ",1)"
        Next

    Fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        For i = 4 To 59
            Cells(i, 4).Formula = "=ROUND(" & Cells(i, 1).Address & ",1)"
        Next

    Apparemment pas besoin de Address pour FormulaLocal mais j'ai testé, ça fonctionne avec également.


    Encore Merci Marc-L !

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

Discussions similaires

  1. Affecter une valeur à un tableau d'objets
    Par Christophe Genolini dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/08/2013, 13h39
  2. Réponses: 0
    Dernier message: 25/01/2013, 11h14
  3. affecter une valeur via un userform à une variable d'une procédure
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2012, 10h58
  4. Réponses: 10
    Dernier message: 07/07/2011, 23h39
  5. [scriplet] affecter une valeur par un bean:write
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/11/2004, 16h29

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