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 :

Convertir formules en codes. [XL-2010]


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
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut Convertir formules en codes.
    Bonjour à tous.
    Voila, j'ai un fichier (xlsm) qui comporte plusieurs formules sur certaines colonnes (sur plusieurs onglets également).
    Ces formules sont "étirées" vers le bas, afin qu'elles fonctionnent en relation avec les cellules correspondantes en fonction de la longueur du fichier (nombre de lignes) qui est variable.
    Le problème, c'est que cela alourdi considérablement le fichier (c'est peu dire) de "tirer" ces formules sur 2500 lignes ou plus.
    L'idée serait donc de remplacer ces formules dans les cellules par un code dans les feuilles. Dans mon fichier, j'ai une colonne qui est déjà traitée de cette façon, mais je suis bien incapable de l'adapter aux autres colonnes.
    Comme il est d'usage sur ce forum, j'attends une sollicitation éventuelle pour poster mon fichier exemple, qui serait sans doute plus parlant.
    Merci de votre intérêt,

    Cordialement,

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'idée serait donc de remplacer ces formules dans les cellules par un code dans les feuilles. Dans mon fichier, j'ai une colonne qui est déjà traitée de cette façon, mais je suis bien incapable de l'adapter aux autres colonnes.
    Ce qui serait plus parlant, ce serait de publier le code que tu as déjà réaliser puisque tu dis avoir déjà réaliser cela sur une feuille. Ensuite tu peux expliquer pourquoi tu ne sais pas l'adapter pour les autres feuilles.
    Ceci dit tirer les formules sur 2500 lignes, ne dois pas être insurmontable.
    As-tu essayé le double clic où connais-tu l'outil atteindre (touche F5) ?
    Exemple :
    Tu te places sur C2, tu appuies sur F5, dans le TextBox référence de la boite de dialogue Atteindre, tu tapes C2501 et tu cliques sur OK en gardant le doigt sur la touche Maj/Shift la sélection est faites sur les 2500 lignes.
    Ensuite tu tapes la formule et tu confirmes par Ctrl + Enter. La formule est copiée sur toutes les lignes sélectionnées.
    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
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Bonjour à tous, bonjour corona et merci de ton intérêt.
    Voici le code (qui ne vient pas de moi, merci mapomme et JCGL) :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ChangedCells, xcell As Range
     
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    '  Mettre en colonne A le jour (jjj) si changement(s) en colonne B
    If Not Intersect(Target, Range("B:B")) Is Nothing Then
       Set ChangedCells = Intersect(Target, Range("B:B"))
       For Each xcell In ChangedCells
     
          xcell.Offset(0, -1) = Left(Format(xcell, "ddd"), 3)
       Next xcell
    End If
     
    Application.EnableEvents = True
    End Sub
    Sinon, j'ai dû mal m'expliquer. Je sais bien sûr "étirer" une formule, mon souhait est de ne pas avoir à le faire pour 2 raisons:
    Le fichier étant destiné à servir à d'autres personnes, il ne faut pas qu'elles aient elles-même à tirer ces formules.
    Si je les étire "à l'avance", la taille du fichier explose (il passe de 400 ko à 7 Mo).
    Un exemple d'une de mes formules "à traiter" (j'en ai 38 en tout !!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(GAUCHE(INDEX('échantillon daté'!$K$1:$AD$1;EQUIV($A2;DECALER('échantillon daté'!$K$1:$AD$1;EQUIV($D2;'échantillon daté'!$C$2:$C$10999;0););0));1)&(NBVAL(DECALER('échantillon daté'!$K$1:$AD$1;EQUIV(Plannings!$D2;'échantillon daté'!$C$2:$C$10999;0);)));"")

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le fichier étant destiné à servir à d'autres personnes, il ne faut pas qu'elles aient elles-même à tirer ces formules.
    Pour palier ce problème, il suffit que tu transformes tes cellules en tableau (Commande Tableau de l'onglet [Insertion] du groupe Tableaux).
    Ainsi dès que l'on entre une valeur dans une cellule d'une nouvelle ligne, toutes les formules de cette ligne sont copiées.
    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

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Rebonjour corona, merci de ton attention.
    Je dois rater quelque chose, quand je converti en tableau, outre le fait que cela me supprime toutes mes MFC, ce qui est très génant par ailleurs, et bien les formules ne s'appliquent pas lorsque je rajoute des données sur des lignes supplémentaires. J'ai essayé en définissant le tableau sur les colonnes complètes avec les formules saisies uniquement sur les lignes 2 et 3 (1 étant les entêtes), sans succès, j'ai essayé ensuite en définissant le tableau sur les seules 3 premières lignes, sans plus de succès.
    Les seuls cas ou cela "fonctionne", c'est soit quand j'insère des lignes au milieu du tableau défini, ce qui ne me sert à rien, je n'insère pas, je "colle" ou vais chercher (par macro). Ou alors, si les formules sont également tirées à l'intérieur du tableau jusqu'en bas (2500 à 3000 lignes), ce qui finalement revient au même que la version initiale, donc inutile.
    Toutefois, j'ai entendu parler de la fonction "DECALER", sans la maitriser, je me dit que je peux peut-être définir la taille de mes tableaux avec cette fonction ?
    Si vous me dites que c'est une piste à explorer, je creuserais en ce sens sur le net...
    Sinon, je rate peut-être une simple manipulation....
    Merci encore !

  6. #6
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    C'est très curieux ce que tu décris parce-que je te confirme que cela fonctionne bien tel que je te l'ai signalé.
    Est-tu passé par l'onglet [Insertion] groupe Tableaux Tableau ?
    Ensuite tu as la boîte de dialogue Créer un tableau qui apparait et t'invite à confirmer la plage de cellules concerné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

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Bonsoir corona. Effectivement, je pense rater quelque chose, mais quoi ?
    Voici le détail point par point de ce que j'ai tenté (3 "méthodes") sur l'onglet "Plannings" de mon fichier, à savoir que les données générées par macro s'incrémentent dans les colonnes A à K, et que toutes mes formules sont placées de M à AG :
    Méthode 1 :
    - J'efface le contenu de toutes les lignes au delà de la ligne 3. Il me reste donc la ligne d'entêtes, puis 2 lignes avec mes formules (de M à AG).
    - Je me positionne en A1.
    - Je clique sur insertion- Tableau.
    - Il me propose par défaut la plage $A$1:$AG$3.
    - Je valide.
    - Ensuite, je saisi en ligne 4 (de A4 à K4) des nouvelles données.
    - Le résultat, aucun calcul, aucune formule dans les cellules M4 à AG4.

    Méthode 2 :
    - Exactement la même que la méthode 1, à la différence prêt que pour la définition de la plage, je rentre $A$1:$AG$11000.
    - Même résultat (aucun).

    Méthode 3 :
    - Exactement la même que la méthode 1, à la différence prêt que pour la définition de la plage, je rentre $A:$AG
    - Même résultat (aucun).

    Je pense que ce détail permettra de voir ce qui cloche dans ma procédure, c'est sans doute évident pour des habitués, mais je ne vois pas....

    Et de toute façon, même si cela fonctionnait, un inconvénient majeur subsisterait ; La conversion en tableau semble me faire perdre toutes mes MFC, ce qui est rédhibitoire pour moi...

    En tous cas, merci pour l'attention portée....
    Ne voyant pas comment avancer avec cette technique, je suis en train d'essayer (avec mon petit niveau) la méthode suivante :
    Pour les formules de l'onglet "Planning" par exemple :
    - Je crée un onglet (que je masquerais ensuite) avec en ligne 2 une copie de toutes mes formules.
    - Je nomme la plage contenant ces formules (de M2 à AG2).
    - J'essaye (j'en suis là), dans le code de la page "Plannings", de programmer la recopie de la formule (de M à AG) dès lors que des données sont saisies sur une ligne (de A à K). Mais j'ai du mal pour l'instant...
    Pensez-vous que c'est le bon angle d'attaque ? Dois-je persévérer en ce sens ?
    Mon fichier est bien sûr prêt à être posté dès lors qu'il est sollicité, conformément à la charte...
    Merci de votre attention en tous cas.
    Cordialement,

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

Discussions similaires

  1. Convertir ce source code
    Par Chad11 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/02/2008, 04h09
  2. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08
  3. l'astuce date et heure de maintenant sans formule ni code
    Par zazaraignée dans le forum Contribuez
    Réponses: 5
    Dernier message: 14/08/2007, 13h54
  4. Aide :convertir caractére vers code ascii
    Par MAXIMIX dans le forum C++
    Réponses: 2
    Dernier message: 19/08/2006, 10h46
  5. [HTML] Convertir accent en code
    Par zoom61 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/02/2006, 14h00

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