Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2011, 12h37   #1
Membre du Club
 
Avatar de texas2607
 
Fred
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Nom : Fred
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 60
Points : 60
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
__________________
Loi des Évolutions synchronisées : Les logiciels deviennent de plus en plus lent, et ceci plus vite que le hardware ne devient plus rapide.
texas2607 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 13h50   #2
Membre actif
 
Eric
Inscription : février 2008
Messages : 439
Détails du profil
Informations personnelles :
Nom : Eric

Informations forums :
Inscription : février 2008
Messages : 439
Points : 156
Points : 156
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+
ericdev67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h14   #3
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

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

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
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 :
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.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h57   #4
Membre actif
 
Eric
Inscription : février 2008
Messages : 439
Détails du profil
Informations personnelles :
Nom : Eric

Informations forums :
Inscription : février 2008
Messages : 439
Points : 156
Points : 156
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+
ericdev67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 15h07   #5
Membre du Club
 
Avatar de texas2607
 
Fred
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Nom : Fred
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 60
Points : 60
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
__________________
Loi des Évolutions synchronisées : Les logiciels deviennent de plus en plus lent, et ceci plus vite que le hardware ne devient plus rapide.
texas2607 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h08   #6
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

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

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
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 :
Range("B40").Formula = "=$A$1+$A$2"
par :
Code :
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
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h28   #7
Membre du Club
 
Avatar de texas2607
 
Fred
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Nom : Fred
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 60
Points : 60
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 ?
__________________
Loi des Évolutions synchronisées : Les logiciels deviennent de plus en plus lent, et ceci plus vite que le hardware ne devient plus rapide.
texas2607 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h43   #8
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

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

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
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.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h55   #9
Membre du Club
 
Avatar de texas2607
 
Fred
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Nom : Fred
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 60
Points : 60
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
__________________
Loi des Évolutions synchronisées : Les logiciels deviennent de plus en plus lent, et ceci plus vite que le hardware ne devient plus rapide.
texas2607 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h20.


 
 
 
 
Partenaires

Hébergement Web