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 :

Formules en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Formules en VBA
    Bonjour,
    Je cherche à récupérer des données d'une feuille à une autre dans un fichier de plus de 140 000 lignes.
    Mon code y parviens très bien avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.FormulaArray = _
            "=IF(OR(R2C19<>""TROUVER"",ISERROR(INDEX(BdD!R2C1:R144765C64,SMALL(IF(R2C15=BdD!R2C28:R144765C28,ROW(BdD!R2C28:R144765C28))," & i & ")-1,1))),"""",INDEX(BdD!R2C1:R144765C64,SMALL(IF(R2C15=BdD!R2C28:R144765C28,ROW(BdD!R2C28:R144765C28))," & i & ")-1,1))"
    Mais le passage par l'inscription de la formule dans les cellules est très long, j'essaie donc de calculer le résultat directement par VBA mais n'y parviens pas.

    La formule obtenue est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ={SI(OU($S$2<>"TROUVER";ESTERREUR(INDEX(BdD!$A$2:$BL$144765;PETITE.VALEUR(SI($O$2=BdD!$AV$2:$AV$144765;LIGNE(BdD!$AV$2:$AV$144765));1)-1;1)));"";INDEX(BdD!$A$2:$BL$144765;PETITE.VALEUR(SI($O$2=BdD!$AV$2:$AV$144765;LIGNE(BdD!$AV$2:$AV$144765));1)-1;1))}
    J'ai commencé par le commencement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIGNE(BdD!$AV$2:$AV$144765)
    , aucun problème mais à partir de l'introduction du ça ne va plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Range("O2").Value = Range("BdD!AV2").Value, Range("BdD!AV2:AV144765").Row, 0)
    ne pose pas de problème mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0)
    ne fonctionne plus: "Erreur d'exécution '13': Incompatibilité de type" et en voulant passer sur une formule matricielle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evaluate(IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0))
    Idem.

    Le code entier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub APPFUNCT()
     
     
    Dim x
     
    x = Evaluate(IIf(Range("O2").Value = Range("BdD!AV2:AV144765").Value, Range("BdD!AV2:AV144765").Row, 0))
    Range("S4").Value = x
     
    End Sub
    Merci pour toute aide!!!!!!!

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Kestion, Bonjour le Forum,

    Très belle et heureuse année à tous!

    A mon avis, mieux vaut garder la formule donnée par l'enregistreur si celle-ci répond à ton besoin.
    Tu peux utiliser les propriétés de calcul et d'affichage écran de l'Objet Application
    Tu peux également coller les valeurs aux cellules après calcul.

    A adapter

    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
    Option Explicit
     
    Public Sub ecriture_formule()
     
    Const laformule As String = "=A2*3"
     
    Dim derlign As Long
     
    With Application
            .ScreenUpdating = False
            .Calculation = xlCalculationManual
    End With
     
    With Worksheets(1)
            derlign = .Cells(.Rows.Count, 1).End(xlUp).Row
            With .Range("B2:B" & derlign)
                    .Formula = laformule
                     Application.Calculate
                    .Value = .Value
            End With
    End With
     
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Merci, en effet, j'ai repris le blocage du calcul et de l'affichage avec déblocage à la fin puis copier coller (valeurs) et mon fichier est devenu léger comme une plume.....

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    avec déblocage à la fin
    Je précise à toute fin utile.
    Dans mon code, un calcul s'exécute après formulation.
    Si l'on souhaite réinitialiser le mode de calcul, alors il faut modifier la propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation

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

Discussions similaires

  1. [VBA-E]Formules en VBA?
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/06/2007, 20h55
  2. [VBA-E] ecrire une formule en vba
    Par Huubb dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/01/2007, 14h15
  3. tirage formules en VBA avec excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 23/11/2006, 18h33
  4. Paramétrer une formule en vba
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2006, 11h48
  5. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 00h12

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