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 :

Copîe feuille classeur fermé (une feuille précise) et coller dans le classeur ouvert (nom constant )


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
    Administrateur de base de données
    Inscrit en
    Octobre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2019
    Messages : 13
    Par défaut Copîe feuille classeur fermé (une feuille précise) et coller dans le classeur ouvert (nom constant )
    Bonjour
    J'ai encore une question vba
    j'ai préparer ce code mais pas de solution exacte :
    je m'explique :

    -> classeur A (fermé) contient les données à mettre à jour (onglet fixe "Donnees").
    -> calsseur B (ouvert) a un feuille ("Donnees") que je dois mettre a jour (mais le nom de la feuille doit rester le même). Pas "Donnees (x)"
    bout de code
    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
     
    Sub b()
    Dim objSh, objFic, Fic2Open$, WBKSource As Workbook
    Dim nom As String
    Dim i As Integer
     
     
    nom = "donnees"
    Set objSh = CreateObject("Shell.Application")
    MsgBox "Sélectionner le fichier dans le répertoire adéquat contenant la source données des communes (en XLS) "
    Set objFic = objSh.BrowseForFolder(&H0&, "Sélectionner le fichier dans le répertoire adéquat", &H4000&)
    Fic2Open = objFic.ParentFolder.ParseName(objFic.Title).Path & ""
    Set WBKSource = Workbooks.Open(Fic2Open)
    i = 1
    If i = 1 Then
    MsgBox "Effacement de l'ancienne fiche de données "
    WBKSource.Sheets(nom).Copy Before:=ThisWorkbook.Sheets(nom)
    MsgBox "Effacement de l'ancienne fiche de données "
     
    Else: Sheets("donnees").Delete
    End If
     
    WBKSource.Close False
    End Sub
    J'ai peut être zapppé une étape....
    Merci par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 444
    Par défaut
    Bonjour,

    Une façon de faire:
    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
    39
    40
    41
    42
    43
    44
    45
    Option Explicit
     
    Sub b()
       Dim Fic2Open As String, WBKSource As Workbook, nom As String
       '--- sélection fichier
       With Application.FileDialog(msoFileDialogFilePicker)
          .AllowMultiSelect = False           '--- 1 seul fichier
          .InitialFileName = ThisWorkbook.Path
          .Title = "Sélectionner 1 fichier"
          .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
          If .Show = -1 Then
             Fic2Open = .SelectedItems.Item(1)
          Else
             Fic2Open = ""
          End If
       End With
       '--- copie données
       If Fic2Open = "" Then
          MsgBox "Aucun fichier sélectionné", , "Pour info"
       Else
          nom = "Donnees"
          Set WBKSource = Workbooks.Open(Fic2Open)
          On Error Resume Next
          WBKSource.Sheets(nom).Cells.Copy ThisWorkbook.Sheets(nom).Range("A1")
          If Err.Number = 0 Then
             On Error GoTo 0
             If MsgBox("Supprimer la feuille " & nom & vbLf & _
                       "du fichier " & Fic2Open & " ?" & vbLf & _
                       "(suppression définitive, non récupérable)", vbYesNo, "A confirmer") = vbYes Then
                Application.DisplayAlerts = False
                WBKSource.Sheets(nom).Delete
                Application.DisplayAlerts = True
                WBKSource.Close True
             Else
                WBKSource.Close False
             End If
          Else
             On Error GoTo 0
             MsgBox "Pas de feuille '" & nom & "'" & vbLf & _
                    "dans le fichier " & Fic2Open & " !", , "Pour info"
             WBKSource.Close False
          End If
          Set WBKSource = Nothing
       End If
    End Sub
    Bonne continuation.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2019
    Messages : 13
    Par défaut
    Bonjour Le forum, et à vous grand merci pour votre aide.
    Cependant il reste la partie à voir
    Classeur A (ouvert et à mettre a jour) la feuille ''donnees'' doit être effacée si elle existe dans le classeur B.
    Classeur B (on copie) mais on n'efface pas la feuille ''donnees" car elle sert à plusieurs mise à jour à d'autres utilisateurs.
    Merci par avance
    Et belles fêtes de fin d'années à tous

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 444
    Par défaut
    Bonjour,

    Dans ce cas, ceci pourrait convenir:
    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
    39
    40
    41
    42
    43
    44
    45
    Sub b()
       Dim Fic2Open As String, WBKSource As Workbook, wSh As Worksheet
       Dim sNom As String, bNom As Boolean
       '--- sélection fichier
       With Application.FileDialog(msoFileDialogFilePicker)
          .AllowMultiSelect = False           '--- 1 seul fichier
          .InitialFileName = ThisWorkbook.Path
          .Title = "Sélectionner 1 fichier"
          .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
          If .Show = -1 Then
             Fic2Open = .SelectedItems.Item(1)
          Else
             Fic2Open = ""
          End If
       End With
       If Fic2Open = "" Then
          MsgBox "Aucun fichier sélectionné", , "Pour info"
       Else
          '--- aller sur feuille sNom
          sNom = "Donnees"
          bNom = False
          For Each wSh In ThisWorkbook.Worksheets
             If wSh.Name = nom Then bNom = True
          Next wSh
          If bNom = True Then
             ThisWorkbook.Worksheets(sNom).Select
             Cells.Clear '--- vide la feuille existante
          Else
             Worksheets.Add().Name = sNom
          End If
          '--- copier données
          Set WBKSource = Workbooks.Open(Fic2Open)
          For Each wSh In WBKSource.Worksheets
             If wSh.Name = nom Then bNom = True
          Next wSh
          If bNom = True Then
             WBKSource.Sheets(nom).Cells.Copy ThisWorkbook.Sheets(nom).Range("A1")
          Else
             MsgBox "Pas de feuille '" & nom & "'" & vbLf & _
                    "dans le fichier " & Fic2Open & " !", , "Pour info"
          End If
          WBKSource.Close False
          Set WBKSource = Nothing
       End If
    End Sub
    Bonne continuation.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2019
    Messages : 13
    Par défaut
    Bonjour Merci pour votre aide.
    Je n'arrive pas a copier dans ma procédure. Cela plante.
    Elle copie une feuille dans le classeur destination au nom de Donnees, mais vide.

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/03/2017, 19h21
  2. [XL-2007] Copier une plage dans une feuille et la coller dans une autre du même classeur.
    Par kedmard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2012, 15h55
  3. Réponses: 19
    Dernier message: 13/04/2012, 09h30
  4. Réponses: 3
    Dernier message: 02/09/2009, 00h48

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