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 cellule d'un classeur vers un autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut Copier cellule d'un classeur vers un autre
    Bonjour,

    J'aimerai copier la valeur d'une cellule d'un classeur B (ouvert mais non visible) vers mon classeur A (où est placé ma macro).

    Voici mon code, celui-ci ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fichier = appxl.Windows(stFile)
    Voici le code complet :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub maj_ancien()
    Dim wb1, wb2, stFile, nameFile, commentaire, statut, test1, test2 As String
    Dim nbre_ligne1, nbre_ligne2, compteur_ligne1, compteur_ligne2, compteur_colonne1, compteur_colonne2 As Integer
     
     
     
     
    Dim appxl As Excel.Application
    Dim fichier As Window
    Dim feuille As Worksheet
    Set appxl = CreateObject("Excel.application")
    Dim read As Variant
     
    nameFile = ThisWorkbook.Name
     
    stFile = Sheets("Lien_PN_ancien").Cells(1, 2).Value
     
    With appxl
        .Workbooks.Open stFile
        .Visible = False
    End With
     
     
     
     
     
    Set fichier = appxl.Windows(stFile)
    fichier.Activate
    Set feuille = appxl.Sheets("Pièce Nouvelle")
     
    Workbooks(nameFile).Sheets("Lien_PN_ancien").Cells(10, 1).Value = Workbooks(stFile).Sheets("Pièce Nouvelle").Cells(3, 1).Value
     
     
    appxl.Workbooks(stFile).Close
     
     
     
    End Sub
    merci pour votre aide.

    Bonne journée

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    Voici mon nouveau code, et cette fois il bug sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks(nameFile).Sheets("Lien_PN_ancien").Cells(10, 1).Value = Workbooks(nomFichier).Sheets("Pièce Nouvelle").Cells(3, 1).Value

    voici le code complet :

    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
    30
    31
    32
    33
    34
    Dim wb1, wb2, stFile, nameFile, commentaire, statut, test1, test2, nomFichier As String
    Dim nbre_ligne1, nbre_ligne2, compteur_ligne1, compteur_ligne2, compteur_colonne1, compteur_colonne2 As Integer
     
     
     
     
    Dim appxl As Excel.Application
    Dim fichier As Window
    Dim feuille As Worksheet
    Set appxl = CreateObject("Excel.application")
    Dim read As Variant
     
    nameFile = ThisWorkbook.Name
     
    stFile = Sheets("Lien_PN_ancien").Cells(1, 2).Value
     
    With appxl
        .Workbooks.Open stFile
        .Visible = True
    End With
     
     
    ' Récupération du nom du classeur + extension
    For i = Len(stFile) To 1 Step -1
        If Mid(stFile, i, 1) = "\" Then Exit For
    Next
    nomFichier = Mid(stFile, i + 1, Len(stFile))
     
     
     
    Workbooks(nameFile).Sheets("Lien_PN_ancien").Cells(10, 1).Value = Workbooks(nomFichier).Sheets("Pièce Nouvelle").Cells(3, 1).Value
     
     
    appxl.Workbooks(stFile).Close

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    pas plus tard qu'hier il y a eu une demande similaire a savoir (DVP est muni d'un moteur de recherche)
    https://www.developpez.net/forums/d1.../#post10551671
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    En effet, j'avais pas vu ce topic. Après une lecture attentive, je ne comprends toujours pas pourquoi mon code ne passe pas ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    Mon code marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nameFile = ThisWorkbook.Name
     
    stFile = Sheets("Lien_PN_ancien").Cells(1, 2).Value
     
    Set wb1 = Workbooks.Open(stFile)
     
    Workbooks(nameFile).Sheets("Lien_PN_ancien").Cells(10, 1).Value = wb1.Sheets("Pièce Nouvelle").Cells(3, 1).Value
     
     
    wb1.Close
    Set wb1 = Nothing
    Par contre j'ai deux question :

    - Comment récupérer la donnée en toutes transparences sans voir l'ouverture du classeur wb1?
    - Comment ne pas devoir cliquez sur "Mise à jour" ou "Ne pas mettre à jour" à l'ouverture de wb1?


    Merci d'avance

    Vincent

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    tu n'a pas besoins de activate et windows et encore moins d'ouvrir une autre instance d'excel et autre joyeuseté
    si tu reference ton object tu t'en tiens la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testx()
        Dim feuille As Worksheet, stfile$, WbK2 As Workbook, WbK1 As Workbook
        stfile = Sheets("Lien_PN_ancien").Cells(1, 2).Value    'IMPORTANT !!!!!!!le chemin ici!!! est il complet ou contient il seulement le nom du classeur
        Application.ScreenUpdating = False
        feuille = "Pièce Nouvelle"
        Set WbK1 = ThisWorkbook
        Set WbK2 = Workbooks.Open(stfile)
        WbK1.Sheets("Lien_PN_ancien").Cells(10, 1).Value = WbK2.Sheets(feuille).Cells(3, 1).Value
        WbK2.Close
    End Sub
    comme tu peux le voir je n'ai pas besoins de connaitre le nom du classeur a partir du momoent ou le "set wbk2=workbooks.open(......) ouvre le classeur et donc que stfile est un chemin complet valide

    mais je rehitere mon avis sur la methode executeexcel4macro demontré dans le post indiqué dans le lien qui est moins lourde et plus rapide
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    le problème c'est que je n'ai pas compris la méthode executeexcel4macro.

    merci pour toutes tes informations et en parallèle je vais essayer de comprendre la méthode mais je suis peu doué avec le R1C1

  8. #8
    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
    Si ta macro est dans Excel, inutile de passer par l'application puisque tu y es déjà.
    Il est aussi conseillé d'utiliser Workbook (le classeur) plutôt que Window (la fenêtre).
    Autre info : dans un Dim, quand on indique le type de données que pour le dernier élément, tous les autres sont de type Variant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub maj_ancien()
    Dim WBSource As Workbook
     
    Set WBSource = Workbooks.Open(Sheets("Lien_PN_ancien").Cells(1, 2).Value)
    ThisWorkbook.Sheets("Lien_PN_ancien").Cells(10, 1).Value = WBSource.Sheets("Pièce Nouvelle").Cells(3, 1).Value
    WBSource.Close
    Set WBSource = Nothing
     
    End Sub

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

Discussions similaires

  1. Copier feuille d'un classeur vers un autre classeur
    Par Jika971 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/11/2017, 15h05
  2. [XL-2010] Copier-coller d'un classeur vers un autre et de plage différentes
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2015, 15h57
  3. copier feuille d'un classeur vers un autre
    Par steeeve34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/07/2012, 19h08
  4. [XL-2007] Copier les cellules d'un classeur vers un autre
    Par tibofo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2010, 13h02
  5. [AC-2003] Copier une plage de cellules d'un classeur vers un autre classeur
    Par bdcds dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/06/2009, 14h58

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