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 :

Insertion de formules "dynamiques"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Business Analyst
    Inscrit en
    Novembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 17
    Par défaut Insertion de formules "dynamiques"
    Bonjour à tous,

    C'est mon premier message sur cette partie du forum (je suis bien plus à l'aise sur Power BI ).

    Un ami m'aide a développer un générateur de facture en VBA, à côté de cette dernière une partie "analyse financière" de l'opération apparaît lors de l'appui sur un bouton. Mon collègue a fait en sorte d'appeler des formules qui sont stockées sur une autre feuille de ce classeur, j'ai écrit des formules, mais quand je les appelle, elles apparaissent avec les mauvaises destinations.

    Globalement, 10 formules vont être copiée, sur la feuille source elles sont toutes sur la ligne 2 de la feuille, mais lors de l'appel, elles vont venir se renseigner à chaque ligne où il y a un produit sur la facture (range("CORPS") dans le code.
    Le problème est le suivant, quand elles sont appelée les formules pointent sur la ligne 2, et non sur la ligne sur laquelle elle se trouve (ex: la formule =o2*k2, appelée sur la ligne 23 devrait devenir = o23*k23, etc...)
    J'ai donc 2 questions :
    • Le choix de faire les formules ainsi de les appeler est-il le bon ? si oui, il faut donc qu'elles deviennent dynamique.
    • Si ce choix n'est pas le bon, l'autre solution est-elle d'écrire directement dans le code VBA la formule, mais dans ce cas, je ne sais pas faire j'aurais besoin d'aides


    Voici le code utilisé pour "l'appel" des mesures, les mesures sont simples (multiplications et calculs de %)

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
                 For Each c In Range("CORPS")
                        c.Select
                        nivInsert = ActiveCell.Row
                                If Range("c" & nivInsert).Value <> "" And Range("M" & nivInsert).Value <> "" Then
     
     
     
                                    Worksheets("Saisies").Range("o" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("o2").Formula
     
                                    Worksheets("Saisies").Range("p" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("p2").Formula
     
                                    Worksheets("Saisies").Range("q" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("q2").Formula
     
                                    Worksheets("Saisies").Range("r" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("r2").Formula
     
                                    Worksheets("Saisies").Range("s" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("s2").Formula
     
                                    Worksheets("Saisies").Range("t" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("t2").Formula
     
                                    Worksheets("Saisies").Range("u" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("u2").Formula
     
                                    Worksheets("Saisies").Range("v" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("v2").Formula
     
                                    Worksheets("Saisies").Range("w" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("w2").Formula
     
                                    Worksheets("Saisies").Range("x" & nivInsert).Formula = Sheets("Analyse_Rentabilite").Range("x2").Formula
     
     
     
                                    Worksheets("Saisies").Range("o" & nivInsert & ":x" & nivInsert).Select
                                    Call miseenforme
     
                                        With Selection
                                            .HorizontalAlignment = xlRight
                                            .VerticalAlignment = xlJustify
                                            .WrapText = False
                                            .Orientation = 0
                                            .AddIndent = False
                                            .IndentLevel = 0
                                            .ShrinkToFit = False
                                            .ReadingOrder = xlContext
                                            .MergeCells = False
                                        End With

    Merci d'avance pour vos réponses et d'éventuelles suggestions !

    Cordialement,
    Quentin

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour et bienvenue sur le Forum

    Pour obtenir l'équivalent de copier / collage spécial : formules, tu peux utiliser FormulaR1C1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Worksheets(1).Range("Cible").FormulaR1C1 = Worksheets(1).Range("Source").FormulaR1C1

  3. #3
    Membre averti
    Homme Profil pro
    Business Analyst
    Inscrit en
    Novembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 17
    Par défaut
    Merci pour ton aide, j'ai finalement opté pour un copy/paste spécial, qui marche tout aussi bien !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each c In Range("CORPS")
                        c.Select
                        nivInsert = ActiveCell.Row
                                If Range("c" & nivInsert).Value <> "" And Range("M" & nivInsert).Value <> "" Then
     
     
                Sheets("Analyse_Rentabilite").Select
                Range("O20").Copy
                Sheets("Saisies").Select
                Range("O" & nivInsert).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
    Je clos le topic, j'espère que les 2 alternatives proposées aideront certains !

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par Kentin375 Voir le message
    Merci pour ton aide, j'ai finalement opté pour un copy/paste spécial, qui marche tout aussi bien !
    Eh bien non, le Copy / Paste Spécial ne fonctionne pas aussi bien, car il passe par le Presse Papier de Windows.
    Quand c'est possible (et là c'est très facile) il faut éviter d'utiliser le presse papier : ce dernier est à la disposition simultanée de toutes les applications. Une autre application peut interférer avec ton Copy / Paste.

    D'autre part, avec VBA, il faut supprimer les "Select" inutiles (c'est à dire tous les "Select" de ton code).

  5. #5
    Membre averti
    Homme Profil pro
    Business Analyst
    Inscrit en
    Novembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 17
    Par défaut
    Hello,

    Merci pour ton retour, je suis novice sur VBA et la structure du code a été faite par mon collègue, je ne connais pas les règles basiques ou best practice du VBA, je n'ose pas supprimer des balises car je ne connais pas encore leur fonctionnement, si tu as un lien vers l'utilisation des .Select , je suis preneur !

    Merci pour ton retour en tout cas.

    Bien cordialement,

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Kentin375 Voir le message
    .
    Ici, un excellent cours VBA gratuit pour débutants :
    https://bidou.developpez.com/article/VBA/

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

Discussions similaires

  1. [JXL] Insertion de formule
    Par JibéCC dans le forum Documents
    Réponses: 8
    Dernier message: 14/08/2008, 13h01
  2. Insertion de formule
    Par nicoroth dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 27/06/2007, 13h37
  3. insertion d'images en dynamique
    Par souris56 dans le forum Deski
    Réponses: 2
    Dernier message: 09/05/2007, 11h27
  4. [Excel] Insertion de formule dans ma feuille par macro (erreur400)
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2007, 11h27
  5. [VBA-E] insertion de formule dans cellule
    Par jeff37 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/05/2006, 14h53

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