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 :

Copier la même feuille excel dans 800 classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Bonjour,
    J'ai un répertoire d'environ 800 clients, qui ont tous un classeur excel indépendant, et chaque classeur porte le nom du client.
    Tous ces classeurs clients sont dans un même répertoire.
    Par contre, chaque classeur est construit de la même façon, c'est à dire qu'ils ont tous uniquement une feuille nommée "TECHNIQUE" et une autre feuille nommée "COMMERCIAL".

    Voici maintenant mon problème:
    Je voudrais insérer une troisième feuille "NEW COMMERCIAL" que j'ai déjà créé comme trame sur un autre classeur.
    Une fois cette feuille copiée dans le classeur client, il faudrait ensuite aller sur la feuille "COMMERCIAL", puis copier les lignes 4 à 10, et les coller sur la feuille "NEW COMMERCIAL" aux même lignes (4 à 10), c'est pour récupérer les coordonnées du client.
    Je voudrais éviter de le faire "à la main" pour ces 800 classeurs.
    Pouvez-vous m'aider à le faire de façon automatique?
    D'avance Merci pour votre aide.

    Désolé,
    Je voudrais apporter une modification à ma demande.
    Au lieu de copier - coller les lignes 4 à 10, il faudrait faire les formules suivantes:
    - sur la nouvelle feuille insérée "NEW COMMERCIAL"
    en C3 =COMMERCIAL!C4
    en C4 =COMMERCIAL!F4
    en C5 =COMMERCIAL!G5
    en C6 =COMMERCIAL!C5
    en C7 =COMMERCIAL!C6
    en C8 =COMMERCIAL!E6
    en C9 =COMMERCIAL!F7
    en C10 =COMMERCIAL!C7
    en C11 =COMMERCIAL!C8
    en C12 =COMMERCIAL!E8
    Puis, une fois ces données récupérées via le =, sélectionner les lignes 3 à 12 sur la feuille "NEW COMMERCIAL" et faire un copier collage spécial des valeurs.

    Merci beaucoup de votre aide précieuse.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    hello
    c'est pas cohérent
    si tu copie une formule en C3 et qu'ensuite tu fais un copié/coller sur la ligne 3, tu vas effacer la formule

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    effectivement, mais c'est le but, je veux faire la formule pour récupérer les données, puis ensuite les figer en faisant le copier collage spéciale des valeurs.
    Pour expliquer, je ne veux plus copier coller les lignes 4 à 10 de la feuille "COMMERCIAL" vers les lignes 4 à 10 de la feuille "NEW COMMERCIAL", mais récupérer les données via les formules, puis de les figer via le copier collage spécial des valeurs.
    Merci encore de votre aide.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    comme ce n'est pas vraiment clair ni cohérent, le mieux est d'utiliser l'Enregistreur de macros donnant ainsi une base de code …

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci Marc-L pour la réponse.

    Je vais essayer de reformuler.
    J'ai une liste d'environ 800 classeurs excel identique dans leur contenu.
    Tous les classeurs sont enregistrés dans un seul répertoire.
    Chaque classeur correspond à un client.
    Chaque classeur porte un nom différent, par exemple DUPONT J
    En fait je voudrais rajouter une feuille (trame de base) dans tous ces 800 classeurs.
    Le principe est simple, ouvrir un classeur, puis copier ma feuille, enregistrer et fermer.
    Gros problème, passer un temps fou pour le faire pour ces 800 classeurs.
    Mon souhait serait d'avoir une macro, programme... qui ferait le boulot à ma place.
    N'hésitez pas si ce n'est toujours pas clair.
    Merci beaucoup

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2003
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Voici le code à 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
     
    Sub test0()
    Dim w As Workbook
    Dim classeur As String
    Dim chemin As String
    chemin = "C:\test\"
    classeur = Dir(chemin & "*.xlsm")
    While classeur <> ""
      Set w = Application.Workbooks.Open(chemin & classeur)
      ThisWorkbook.Sheets(1).Copy Before:=w.Sheets(1)
      w.Save
      w.Close
      classeur = Dir
    Wend
    End Sub
    Lian

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Voici la commande que j'ai adapté et qui marche.
    Il me manque encore quelques choses à affiner, mais je tiens le bon bout.
    Je ne manquerai pas de mettre en "résolu" une fois le tout terminé.

    Merci beaucoup

    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
    27
    28
    29
    Sub test0()
    Dim w As Workbook
    Dim classeur As String
    Dim chemin As String
    chemin = "F:\Essai LAC\"
    classeur = Dir(chemin & "*.xls")
    While classeur <> ""
      Set w = Application.Workbooks.Open(chemin & classeur)
      ThisWorkbook.Sheets("New COMMERCIAL").Copy Before:=w.Sheets("COMMERCIAL")
     
      Range("C3:Q12").Select
        Cells.Replace What:="'[Test DUPONT J.xls]", Replacement:="", LookAt:= _
            xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Replace What:="'[Test DUPONT J.xls]", Replacement:="'", LookAt:= _
            xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
        Range("C3:Q12").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("A1").Select
     
      w.Save
      w.Close
      classeur = Dir
    Wend
    End Sub

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Il me reste donc une dernière chose pour finaliser mon projet.

    J'ai un bloc de 3 lignes qui correspond aux renseignements d'une vente quotidienne. Par ex, les lignes 14, 15, et 16.
    En colonne, j'utilise les colonnes B à Q.
    La ligne 14 est figée, elle sert d'en-tête de colonne.
    La ligne 15, me sert de saisie. Je saisi la date en B15, puis des codes de ventes en C15, D15, E15... jusqu'à Q15.
    Dans chaque cellule de la ligne 16 j'ai une formule qui me donne le prix de la vente en fonction du code saisi en ligne 15. c'est une recherchev classique qui va chercher le prix sur une base de données en dehors du classeur excel.
    Par ex, en C15 si j'ai le code H1, alors il m'indique 15€ en C16 qu'il a été rechercher dans la base de données.

    Ensuite je recopie ce bloc de 3 lignes (non remplies bien sûr) plein de fois vers le bas pour les prochaines ventes à venir (jusqu'à la ligne 1000 par exemple).

    Mon problème est que une fois que la vente du jour est effectuée, je voudrais figer les prix correspondants à cette vente, je ne veux plus la formule, car si demain je change les tarifs sur la base, il réactualisera tous les prix des ventes passées.
    Je pense qu'il suffit dans ce cas de faire un copier collage spécial des valeurs de la ligne 16, et le tour est joué.

    Mais par contre il faut garder les formules lorsqu'il n'y a pas de date.

    En résumé, je cherche une commande qui dirait si il y a une date en B15 alors copier collage spécial des valeurs des cellules C16 à Q16, sinon rien on laisse les formules.
    Puis la même chose pour le bloc suivant, c'est à dire s'il y a une date en cellule B18, puis B21 et ainsi de suite jusqu'à l'infini.

    J'ai trouvé comment faire pour exécuter cette macro automatiquement à l'enregistrement du classeur excel, mais je ne sais pas comment faire la boucle de lecture des dates en colonne B et de faire un copier collage spécial des valeurs si besoin.

    Espérant avoir été assez clair dans mes explications,

    Merci beaucoup par avance de votre aide.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Je mets cette discussion Résolu car le sujet initial n'était plus celui de ma dernière discussion.
    J'ai créé une nouvelle discussion "Copier collage spécial des valeurs si cellules non vides" et j'ai la réponse à ma question.

    Merci beaucoup pour votre aide.

    Cordialement

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

Discussions similaires

  1. Code pour copier coller même feuille cible de chaque classeur
    Par aya_a89 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/06/2014, 14h43
  2. Copier - coller des feuilles excel entre plusieurs classeurs
    Par DodoCanada dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/04/2014, 20h58
  3. Réponses: 3
    Dernier message: 21/03/2013, 14h43
  4. [WD11] Ouvrir une feuille Excel dans un classeur
    Par Watier_53 dans le forum WinDev
    Réponses: 1
    Dernier message: 10/04/2008, 19h00
  5. Réponses: 1
    Dernier message: 19/12/2006, 16h12

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