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 :

Intégration Formules sous VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    responsable logistique
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : responsable logistique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut Intégration Formules sous VBA
    Bonjour,

    J'ai aujourd'hui un fichier de 250 000 cellules a devoir gérer avec 40 colonnes et 6215 lignes.
    Ce fichier contient l’ensemble des références en gestion sur notre site.
    Le fichier a pour but de venir comparer pour chaque références les prévisions de vente du Moi M avec le Mois M-1, M-2…

    Nom : 2015-09-28_125850.png
Affichages : 487
Taille : 28,7 Ko

    Si je laisse les formules dans toutes ces cellules, le fichier devient trop volumineux et non manipulable.
    J’ai donc pensé à passer par du VBA qui viendrait exécuter ma formule se trouvant dans une cellule et la copier/coller sur une plage définie.

    J’ai donc tapé ce code

    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
    Sub copie_colle_formules()
    '
    ' copie_colle_formules Macro
    '
     
    '
    Dim nbligne As Integer
    Dim DernColonne As Integer
     
    nbligne = Sheets("Analysis").Range("I5").End(xlDown).Row
    DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
     
    For i = 10 To DernColonne
     
    'copie la formule et la colle sur la bonne cellule
    Cells(3, i).Select
    Application.CutCopyMode = False
    Selection.Copy
    Range(Cells(5, i), Cells(nbligne, i)).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
     
    'remplace la formule par la valeur
    Range(Cells(5, i), Cells(nbligne, i)).Value = Range(Cells(5, i), Cells(nbligne, i)).Value
    Next
    End Sub
    Cela fonctionne mais le mise à jour prend tout de même 4 à 5 minutes.
    Les Formules se trouvant sur la ligne 3 ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SI(ESTERREUR(RECHERCHEV($E3;INDIRECT("'" & J$4 & "'" & "!$C$3:$S$6215" );Analysis!J$1;0));"";RECHERCHEV($E3;INDIRECT("'" & J$4 & "'" & "!$C$3:$S$6215" );Analysis!J$1;0))
    J’utilise la formule INDIRECT() pour rendre la sélection de l’onglet dynamique.

    Qqun aurait-il une bonne idée

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J’utilise la formule INDIRECT() pour rendre la sélection de l’onglet dynamique.
    Si la formule que tu as affichée se trouve sur 250 000 cellules, cela n'est absolument pas étonnant que cela prenne autant de temps.
    En effet, tu utilises dans cette formule la fonction INDIRECT (2 x de surcroît) qui est une fonction volatile. Ce type de fonction est recalculée chaque fois que l'on modifie une cellule quelconque de n'importe quelle feuille de n'importe quel classeur ouvert et si en plus elle est imbriquée dans une autre fonction, elle entraîne automatiquement le recalcul de celle-ci
    Tu imagines donc dans ton cas la ressource de calcul utilisée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    responsable logistique
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : responsable logistique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut
    Merci Philippe de ton retour,
    Connais tu un autre moyen de venir récupérer le nom de l'onglet se trouvant en dur dans une cellule?
    Comme cela est le cas en Cellule J4 , K4, L4...
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plutôt que d'utiliser autant de feuilles, il est préférable de regrouper l'ensemble de ces données dans une seule feuille nommée [FORECAST] et qui regroupera les dates estimées et la valeur estimée pour cette date.Lorsque j'étais commercial, c'est comme cela que je pratiquais.
    Ainsi tu pourras utiliser une fonction telle que SOMMEPROD ou mieux encore les tableaux croisés dynamiques (quelques clics et c'est emballé)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Formule TEXTE sous VBA
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/05/2011, 11h35
  2. Pb de formule de calcul sous VBA
    Par bagheria85 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/09/2010, 11h58
  3. création d'un colonne formule sous vba
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/06/2010, 09h28
  4. [E-02] formules excel sous vba
    Par ladygtk dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/02/2009, 13h19
  5. Forcage sous VBA d'une formule excel
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/10/2007, 10h22

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