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/coller dans un fichier à nom variable [XL-2019]


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
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 49
    Par défaut Copier/coller dans un fichier à nom variable
    Bonjour,

    Je me permet de mettre un petit message ici afin de vous poser une question car cela fait deux jours que je cherches sur divers forums, videos YouTube, Tutoriel, et aide Microsoft.. Je n'arrive pas à trouver de solution.
    Mon niveau en VBA est assez limité, je manque de vocabulaire pour avancer sans aide dans ce fichier.

    Je vous explique donc mon problème:

    J'ai un fichier A qui est un masque, un réceptacle à macro en quelque sorte.
    Et un fichier B qui est un fichier à nom variable (Ce fichier est unique et doit le rester. il à une sorte de numéro de série du type : "SAP_AXXX" avec X = variables) Le fichier de base s'écrit comme suit : "SAP_A839.xls"

    J'ai une première macro qui me permet d'effectuer la mise en forme de sorte à ce que le fichier B ressemble toujours au Fichier A et donc aux autre fichiers crées précédemment pour avoir une trame similaire sur tous mes fichiers.

    Une fois que la mise en forme est faite, je souhaite effectuer un copier coller. (Oui c'est tout bête...).

    Je demande donc à VBA d'activer le fichier A nommé "PERSONAL RC ED17.XLSB" de copier les céllules dont j'ai besoin, et de venir les copier dans le fichier B au même endroit.

    Cependant, le fichier n'ayant jamais le même nom, je n'arrive pas à activer le fichier B et bien entendu je reçois un message d'erreur d’exécution 9 "L'indice n'appartient pas à la sélection".

    Il faut aussi savoir que la cellule que je cherche à copier/coller subit juste avant, une macro permettant d’incrémenter +1 au numéro de série à chaque réalisation de la macro de mise en forme et j'ai pas réussis à l'incorporer directement dans la macro de mise en forme d'ou mes 3 macros et mes copier coller haha.

    J'aimerais donc que vous m'aidiez si possible afin de trouver une solution pour réaliser mon copier coller entre mes deux fichiers en prenant en compte les variables

    B5 est la cellule que je veux copier et coller

    Dans la cellule O5, se trouve le chiffre du numéro de série par exemple le "839" du SAP_A839

    L'écrire comme ca me semblait pertinent pour être en mesure de nommer le fichier facilement, après je me suis peut être compliqué la vie...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub copy()
    NomFichier = "SAP_A" & Range("O5") & ".xls"
     
    Workbooks("PERSONAL RC ED17.XLSB").Activate
    Range("B5").copy
    Workbooks(NomFichier).Activate
    Range("B5").PasteSpecial
    End Sub
    Je vous remercie d'avance de vos conseils.

    Cordialement,

    Axel.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Si ton fichier B est déjà ouvert au moment où tu lances ta macro, tu peux :
    - Boucler sur chaque classeur ouvert
    - Tester le nom de chaque classeur bouclé
    - Si le nom comment par SAP, alors tu as trouvé ton fichier, et en plus tu peux récupérer son nom pour l'utiliser plus tard

    /!\ Attention, cela est risqué si tu peux avoir plusieurs fichier SAP_XXXX d'ouverts en même temps.


    En ce qui concerne ton incrémentation, j'ai du mal à comprendre pourquoi tu ne peux pas l'incorporer dans ta macro de mise en forme.
    Mais à la limite si toutes tes macros fonctionnent, tu peux toujours en écrire une 4e qui appelle simplement les 3 autres à la suite.

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Utilises une (ou plusieurs) variable(s) objet pour le(s) classeur(s) :
    https://silkyroad.developpez.com/VBA...riables/#LII-K

  4. #4
    Membre averti
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 49
    Par défaut
    Bonjour tout d'abord merci de vos réponses rapides.

    Mon fichier B s'ouvre au moment ou j’exécute la macro (Si y'a un moyen de prendre la mise en forme sans l'ouvrir cela m’intéresse)

    Pour boucler le classeur j'ai trouvé ça sur internet qui permet du coup d'après ce que j'ai pu comprendre avec le lien de Patrice de donner une variable aux classeurs grâce aux données présente dans une cellule donnée. Cependant ce que j'ai du mal à comprendre dans ce code c'est qu'il va récupérer les données de la cellule O5 et s'en servir pour trouver le fichier si j'ai bien compris mais faut-il rajouter un ".Activate" ou cela est compris de façon induite dans le code ci dessous ?

    Suite à ce code, je rajoute celui que j'ai posté dans mon précédent message pour qu'il copie et colle dans la feuille de calcul du coup ? Cela donnerais quelque chose comme ça...
    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 Copy()
     
       Dim Wb As Workbook
     
        Dim Cell As Range
     
        Dim plage As Range
     
        plage = [O5]
     
        Set Ws = Sheets(1)
     
        Workbooks("PERSONAL RC ED17.XLSB").Activate
     
        Range("B5").copy
     
        For Each Wb In Application.Workbooks
     
            For Each Ws In Wb.Worksheets
     
                For Each Cell In Ws.Range("O5")
        Next Wb
     
    Range("B5").PasteSpecial
     
       Set Ws = Nothing
     
    End Sub
    Quelque chose me dérange mais je sais pas quoi exactement, j'ai pas eu l'occasion de le tester car je n'ai malheureusement pas le fichier à disposition ce matin, j'effectuerais les tests aux alentours de 11h.

    Le risque d'avoir plusieurs fichiers "SAP_AXXX" ouverts en même temps est présent, cependant il faudra faire cette méthode pour eux aussi est-ce quand même un risque un danger ? Mis à part celui de faire planter l'ordinateur ?

    Pour ce qui est de l'incrémentation, je ne saurais pas vous répondre, chaque macro fonctionne de façon indépendante mais une fois réunies, elles ne fonctionnent plus... Et oui je comptais faire une macro principale une fois mon fichier terminé qui appellerait toutes les macro secondaires dans un ordre précis et me permettrais de tout réaliser en en lançant qu'une.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je plusois deux interventions précédentes.

    Je rajouterai que les Activate sont inutiles, voir même négatifs (affichage désagréable, temps de traitement plus long, code plus compliqué).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub copy()
    Dim Fichier As Workbook
    Set Fichier = Workbooks("SAP_A" & Range("O5") & ".xls")
     
    Workbooks("PERSONAL RC ED17.XLSB").Range("B5").Copy
    Fichier.Range("B5").PasteSpecial
    End Sub
    Cela dit, il y a un élément qui me dérange beaucoup dans ce code : il n'y a pas de référence Worksheet (onglet) entre les Workbook et les Range.
    A moins que ces deux fichiers n'aient qu'un onglet chacun (donc même pas d'onglet vide), ça laisse un risque aléatoire pour sa bonne exécution que, personnellement, je ne prendrais pas.
    Il faudrait à minima placer des Worksheets(1) entre Workbook et Range.

  6. #6
    Membre averti
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 49
    Par défaut
    Bonjour Menhir,

    En effet, mes fichiers n'ont qu'une seule sheet à chaque fois (Le fichier A à été enregistré comme ça et le fichier B est l'exportation d'un logiciel de contrôle, il ne sort donc qu'une seule sheet lors de son export)

    Pour ce qui est des activate, j'avoue je suis coupable c'est l'éditeur de macro

    Finalement j'ai pu me procurer le fichier plus tôt que prévu, et malheureusement le code ne fonctionne pas, il met le message d'erreur d’exécution 9 "L'indice n'appartient pas à la sélection" et il me surligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Fichier = Workbooks("SAP_A" & Range("O5") & ".xls")
    en disant qu'il n'y a aucunes référence à ça.

    Entre temps j'ai déplacé ma cellule O5 en N5 mais j'ai effectué les modifications sur le code, du coup je comprend pas d'ou peut venir le problème. J'ai vérifié, la cellule N5 remonte l'information 839 et le fichier cherché s'appelle bien "SAP_A839.xls" et il est ouvert, le nom de la feuille est identique au nom du classeur (Je nomme les deux grâce à une combinaison de d'autres cellules présente dans le classeur et la formule est identique. Des idées quand à pourquoi cette erreur ?

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Patate3181 Voir le message
    Pour ce qui est des activate, j'avoue je suis coupable c'est l'éditeur de macro
    L'enregistreur de macro est très bien pour montrer la voie, donner des idées, indiquer où chercher, donner un exemple pour des paramètres, etc.

    Mais en aucun cas il ne peut servir à écrire un code. Ce qu'il produit ne doit surtout pas être récupéré tel quel.

    Finalement j'ai pu me procurer le fichier plus tôt que prévu, et malheureusement le code ne fonctionne pas, il met le message d'erreur d’exécution 9 "L'indice n'appartient pas à la sélection" et il me surligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Fichier = Workbooks("SAP_A" & Range("O5") & ".xls")
    en disant qu'il n'y a aucunes référence à ça.
    Déjà, est-ce que le fichier en question est déjà ouvert lorsque tu lances la macro.
    Parce que cette instruction n'ouvre pas le fichier, elle sert juste de référence à un fichier déjà ouvert.

    Ensuite, il faut vérifier le nom.
    Remplace cette ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Nom As String
    Nom = "SAP_A" & Range("O5") & ".xls"
    Debug.Print Nom
    Set Fichier = Workbooks(Nom)
    Et regarde ce qui s'affiche dans la fenêtre d'exécution pour vérifier que ça corresponde précisément à ton nom de fichier.

    S'il n'y a pas d'erreur, essaye de modifier la ligne "Nom = ..." par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom = "SAP_A" & Range("O5")"

  8. #8
    Membre averti
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 49
    Par défaut
    Voilà donc le code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub copy()
    Dim Fichier As Workbook
    Dim Nom As String
    Nom = "SAP_A" & Range("N5") & ".xls"
    Debug.Print Nom
    Set Fichier = Workbooks(Nom)
     
    Workbooks("PERSONAL RC ED17.XLSB").Range("B5").copy
    Fichier.Range("B5").PasteSpecial
    End Sub
    Cela n'a rien changé, le message d'execution et son erreur reste les mêmes et il me surligne cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Fichier = Workbooks(Nom)
    Ai-je fait une erreur ?


    D'accord, je prend note pour l'éditeur, j'peux m'en servir mais jamais lui faire confiance

    Déjà, est-ce que le fichier en question est déjà ouvert lorsque tu lances la macro.
    Parce que cette instruction n'ouvre pas le fichier, elle sert juste de référence à un fichier déjà ouvert.
    Oui, je lance les macros les unes après les autres pour le moment afin de les tester indépendamment, et la première macro ouvre le fichier A. La copie intervient en seconde position donc une fois que le fichier est ouvert et mit en forme

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Patate3181 Voir le message
    Cela n'a rien changé, le message d'execution et son erreur reste les mêmes et il me surligne cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Fichier = Workbooks(Nom)
    Ai-je fait une erreur ?
    As-tu regarder ce que le Debug.Print renvoie dans la fenêtre d'exécution comme je l'ai écrit ?

    Oui, je lance les macros les unes après les autres pour le moment afin de les tester indépendamment, et la première macro ouvre le fichier A.
    Comme je l'ai dit, cette macro n'ouvre pas de fichier.
    Pour qu'elle fonctionne, il faut que les deux fichiers soient déjà ouverts.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/10/2017, 08h52
  2. [LibreOffice][Texte] Macro copier coller dans 2 fichiers différents
    Par fransix dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 08/08/2017, 23h52
  3. [XL-2007] Faire un copier / coller dans un fichier.
    Par starrlaz dans le forum Excel
    Réponses: 2
    Dernier message: 23/07/2016, 13h57
  4. Réponses: 1
    Dernier message: 05/08/2015, 07h57
  5. boucle avec copier coller dans un fichier excel
    Par Chalu_C_Momo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/11/2008, 16h45

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