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

Excel Discussion :

Insérer une formule dans des classeurs fermés


Sujet :

Excel

  1. #1
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut Insérer une formule dans des classeurs fermés
    Bonjour à tous,
    Suite à une modif que j'ai du faire sur un des mes classeur j'ai du rajouter une formule mais maintenant je dois mettre la même formule sur environ 90 classeurs différents.
    Existe t'il un moyen de le faire "en automatique" via vba ou autre, ou alors est ce que je dois me faire manuellement tous les classeurs ?


    Précision : tous les classeurs ont la même structure, il disposent de 3 onglets, ma formule doit être mise en B40 sur l'onglet "Reporting".

    D'avance merci de votre aide.
    Fred

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Perso, j'utiliserai les tutos de Silkyroad dans la FAQ :

    1/ 1er tuto sur l'identification des Classeurs dans un répertoire
    2/ 2ème tuto sur les fichiers fermés, méthode ADO

    Je m'explique : je ferais une bouble sur tous les classeurs présents dans ton répertoire, et je les ouvrirai par méthode ADO, je copie/colle (ou j'écris la formule), et je referme le classeur.

    Avec la méthode ADO, les classeurs ne s'ouvrent pas "physiquement", donc l'opération s'effectue très rapidement....

    A+

  3. #3
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour,
    en s'inspirant de la FAQ, tu met tous les fichiers à modifier dans un même dossier.
    pour l'exemple en "C:\Dossier\". Et le code dans un module standard.
    Le code boucle sur tous les fichiers ".xls", ouvre le classeur à la feuille "Reporting", et met en B40 la formule "=A1+A2", ferme le classeur en enregistrant les modifications et passe au suivant.

    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
    Sub BoucleFichiers()
        Dim Chemin As String, Fichier As String
        Dim wk1 As Workbook, sh As Worksheet
     
     'Définit le répertoire contenant les fichiers
        Chemin = "C:\dossier\"
     
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "*.xls")
     
        Do While Len(Fichier) > 0
            Workbooks.Open Chemin & Fichier
     
            Set wk1 = Workbooks(Fichier)
            Set sh = wk1.Worksheets("Reporting")
     
            wk1.Activate
            sh.Activate
     
            Range("B40").Formula = "=$A$1+$A$2"
     
            wk1.Close True 'ferme le classeur en enregistrant les modif
            Fichier = Dir()
        Loop
    End Sub
    Adapte le chemin des fichiers et adapte la formule.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Hello rvtoulon,

    On dit la même chose , mais c'est vrai qu'en donnant le code, c'est plus pertinent ....et plus satisfaisant....pour texas2607. J'étais un peu à la bourre, je pensais y revenir dans la soirée, rvtoulon a été le plus rapide !!!

    A+

  5. #5
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Salut rvtoulon et merci

    je viens de faire un test ou deux et c'est nickel.

    par contre je ne voudrais pas abuser mais j'aurais 2 points :
    1/ ma formule est : =NB.SI(B8:B36;"07*") et si je met comme ligne :
    Range("B40") = "=NB.SI(B8:B36;"07*")" alors j'ai une erreur de ""

    2/ Est t'il possible de pousser le collage plus loin, c'est a dire :
    je dois mettre ces 2 lignes dans mes classeurs en utilisant ta solution
    Range("A40") = "Client Ardeche:"
    Range("B40") = "=NB.SI(B8:B36;"07*")"

    Par contre comment faire pour avoir A40 en gras et aligné à droite, et B40 en normal mais centré

    Sinon c'est du tout bon, merci énormément.

    Fred

  6. #6
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Re,
    en vba NB.SI = COUNTIF.
    Bon en utilisant l'enregistreur de macro tu aurais pu trouver tout seul le code. il suffit de le faire une fois et tu recopie ensuite le code dans ta macro.
    Bon ceci dit, remplace dans le code que j'ai mis plus haut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B40").Formula = "=$A$1+$A$2"
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Range("A40").Value = "Client Ardeche:"
            Range("A40").Font.Bold = True ' police en gras
            Range("A40").HorizontalAlignment = xlRight 'aligner à droite
     
            Range("B40").FormulaR1C1 = "=COUNTIF(R[-32]C:R[-4]C,""07*"")"
            Range("B40").HorizontalAlignment = xlCenter 'centrer

  7. #7
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Merci énormement,
    En fait je venais de terminer la mise en page avec HorizontalAlignment et font.bold (que j'ai trouvé dans l'aide)

    Par contre je n'avais pas pour la modif de NB.SI
    Qu'appelle tu enregistreur de macro ?

  8. #8
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Je ne sais qu'elle est ta version d'excel 2007 ou 2003 mais si j'ai bonne mémoire dans excel 2003 tu vas dans le menu outils puis dans Macro et tu choisis Enregistrer une macro.
    Une fenêtre va s'ouvrir il va te demander de donner un nom a ta macro, par défault elle s'appelle Macro1 et tu clic sur OK.
    A partir de là toute les manips que tu vas faire seront enregistrées dans la macro sous forme de ligne code.
    Pour finir tu appuis sur le bouton stop de la barre d'outils et la macro est réalisée.
    Ensuite tu vas dans l'éditeur vba et tu regardes le code qui a été généré. C'est pratique mais après il faut faire "le ménage dans le code" en enlevant tout ce qui n'est pas nécessaire.

  9. #9
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Merci,
    je vais m'y mettre et puis c'est comme ca qu'on progresse.
    Pour ma version je suis sous excel 2010 x64 avec win 7 x64..

    Voilà.
    Par contre, j'ai utilisé et mis en fonctionnement tes conseils et ca marche nickel.. Alors encore merci.


    Merci pour ton aide
    Amicalement
    Fred

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

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 13h02
  2. Insérer une formule dans un autre classeur
    Par YDevY dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2012, 09h09
  3. Lire dans des classeurs fermés Excel2007 xlsx et xlsm
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 26/08/2007, 15h59
  4. [VBA] Transférer une feuille dans un classeur fermé
    Par Dephi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/07/2007, 12h11
  5. recherche d'info dans des classeurs fermé
    Par gerald57 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2006, 19h04

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