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 :

Actualisation d'un classeur à partir d'un classeur fermé avec plage, RefersTo et décalage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Actualisation d'un classeur à partir d'un classeur fermé avec plage, RefersTo et décalage
    Bonjour, après trois jours à tourner en rond à partir d'un code trouvé sur internet, je constate que je n'arrive à rien.
    Je cherche à mettre à jour un classeur à partir d'un autre, fermé.

    J'ai trouvé la technique:

    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
    Dim Chemin2 As String, Fichier2 As String
     
    Annee = Worksheets("Feuil15").Range("EK2").Value
     
     
     
      Worksheets("EFFECTIFS 2NDES DONNES").Select
        Worksheets("EFFECTIFS 2NDES DONNES").Activate
     
     
    Chemin2 = "H:\Secretariat\" & Annee & "\outils generaux\effectifs\"
     
    Fichier2 = "exp_liste_des_eleves_par_division.xlsm"
    ThisWorkbook.Names.Add "plage", _
    RefersTo:="='" & Chemin2 & "[" & Fichier2 & "]Feuil3'!$A$1:$BL$2000"
    With Sheets("EFFECTIFS 2NDES DONNES")
    .[A1:BK2000] = "=plage"
    .[A1:BK2000].Copy
    Sheets("EFFECTIFS 2NDES DONNES").Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
     
        Range("A1").Select
     
    Calculate
     
    End With

    Là où je patine sec c'est que je voudrais que dans le classeur à mettre à jour, les cellules portant les valeurs du classeur source soient décalées:

    Dans le classeur source, la plage est et dans le classeur destination: or, avec , la plage dans le classeur destination est l'image exacte de celle du classeur source:

    .


    Existe-t-il une solution s'il vous plaît????

    A tout hasard, le résultat inopérant de mes bidouilles:



    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
    46
    47
    48
    49
    50
    51
    52
    Dim Chemin3 As String, Fichier3 As String
     
    Annee = Worksheets("Feuil15").Range("EK2").Value
     
     
     
      Worksheets("Feuil1").Select
        Worksheets("Feuil1").Activate
     
     
        Range("A1").Select
    Chemin3 = "H:\Secretariat\" & Annee & "\outils generaux\"
    Fichier3 = "casiers profs.xlsm"
     
    Dim plageX As Range
    Set plageX = Range("$A$1:$BK$2000").Offset(0, 8)
     
    ThisWorkbook.Names.Add "plageX", _
    RefersTo:="='" & Chemin3 & "[" & Fichier3 & "]Feuil1'!$A$1:$BK$2000"
     
     
     
    With Workbooks("traitement cdc mentions 2ndes.xlsm")
     
     
     
     
    With Sheets("Feuil1")
     
     
     
    .[H1:BR2000] = "=plageX"
    .[H1:BR2000].Copy
     
     
     
    Sheets("Feuil1").Range("H1").PasteSpecial xlPasteValues
     
    Application.CutCopyMode = False
     
    Range("A1").Select
     
    Calculate
     
     
    Worksheets("Feuil15").Select
        Worksheets("Feuil15").Activate
     
     
     
    End With
    End With
    Avec ce code, mon fichier destination est "alimenté", en H1, à partir de la cellule H1 du fichier source et non A1.

    Un énorme MERCI pour toute aide!!!!!!

  2. #2
    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 Kestion100 Voir le message
    Là où je patine sec c'est que je voudrais que dans le classeur à mettre à jour, les cellules portant les valeurs du classeur source soient décalées:

    Dans le classeur source, la plage est [A1:BK2000] et dans le classeur destination: [H1:BR2000]
    Il suffit d'indiquer la bonne référence de cellule pour appliquer ton PasteSpecial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("EFFECTIFS 2NDES DONNES").Range("H1").PasteSpecial(xlPasteValues)

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Au temps pour mois, je me suis mal exprimé.

    Le premier code fonction dans un autre cadre, sur d'autres feuilles.

    Dans le cas qui me pose problème, la cible est bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("H1").PasteSpecial xlPasteValues
    comme mentionné dans le dernier code.

    J'ai l'impression que les deux plages sont des "images" parfaites avec RefersTo et que donc, quand j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Names.Add "plageX", _
    RefersTo:="='" & Chemin3 & "[" & Fichier3 & "]Feuil1'!$A$1:$BK$2000"
    , lorsqu'après j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Workbooks("traitement cdc mentions 2ndes.xlsm")
     
     
     
     
    With Sheets("Feuil1")
     
     
     
    .[H1:BR2000] = "=plageX"
    .[H1:BR2000].Copy
    l'opération déplace la plage source de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin3 & "[" & Fichier3 & "]Feuil1'!$A$1:$BK$2000"
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin3 & "[" & Fichier3 & "]Feuil1'!$H$1:$BK$2000"
    et c'est ce que je récupère dans ma cible.

    Donc la plage copiée est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin3 & "[" & Fichier3 & "]Feuil1'!$H$1:$BK$2000"
    de ma source et le collage se fait bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("H1:BK2000").PasteSpecial xlPasteValues
    de ma destination comme voulu pour le coup mais les données que je voudrais récupérées sont dans la plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin3 & "[" & Fichier3 & "]Feuil1'!$A$1:$BK$2000"
    de ma source.

    Le hic est que je voudrais que la plage soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin3 & "[" & Fichier3 & "]Feuil1'!$A$1:$BK$2000"
    de ma source

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Pour essayer de clarifier, la procédure fonctionne très très bien quand ma source et ma destination portent sur les mêmes cellules (A1:BK2000 par exemple) mais quand je décale les cellules de la destination par rapport à la source j'obtiens le problème exposé.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je me suis rabattu sur une boucle:


    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Annee = Worksheets("Feuil15").Range("EK2").Value
     
     Worksheets("Feuil15").Select
        Worksheets("Feuil15").Activate
     
    Dim k As Integer, l As Integer, Srce As String
     
     
     
     
    For k = 1 To 100
    For l = 8 To 15
     
    Srce = "H:\Secretariat\" & Annee & "\outils generaux\[casiers profs.xlsm]Feuil1'!R" & k & "C" & l - 7 & ""
     
     
    Select Case Srce
     
    Case Is = ""
     
     
    k = k + 1
    l = l + 1
     
    Case Is = 0
     
    k = k + 1
    l = l + 1
     
    Case Is = "0"
     
    k = k + 1
    l = l + 1
     
    Case Is <> ""
     
        Cells(k, l).Select
        ActiveCell.FormulaR1C1 = _
           "='H:\Secretariat\" & Annee & "\outils generaux\[casiers profs.xlsm]Feuil1'!R" & k & "C" & l - 7 & ""
     
     
     End Select
     
    Next
    Next
     
     
     
    With Sheets("Feuil15")
         With .Range("H1:O100") 
            .Value = .Value
        End With
        End With
        Range("H2").Select
     
        Calculate
    Trop Trop longue.

    N'existe-t-il vraiment aucune solution?


    MERCI

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    SAlut

    Si tu souhaites lire ou écrire des données dans un classeur fermé, le mieux est sans doute d'utiliser la méthode suivante.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Construire un classeur à partir d'autres classeurs
    Par Aussie44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2013, 07h46
  2. [XL-2010] Mise à jour d'un classeur à partir d'autres classeurs
    Par Yauuch dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/08/2012, 17h05
  3. Réponses: 1
    Dernier message: 13/03/2009, 13h08
  4. Réponses: 8
    Dernier message: 09/10/2007, 06h48
  5. Réponses: 4
    Dernier message: 11/10/2006, 10h51

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