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 :

VBA :Renvoyer des valeurs sur un autre classeur [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 361
    Par défaut VBA :Renvoyer des valeurs sur un autre classeur
    Bonjour ,

    A partir d'un tableau Croisé Dynamique (TCD) je cherche le code en VBA qui me permettrai de renvoyer des valeurs sur un autre classeur à l'emplacement dédié.

    Cf les pièce jointe SVP

    Merci Beaucoup!!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour à toi !

    Je te propose le code suivant:
    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
    Sub MoveData()
    Dim cell_ori As Range
    Dim cell_des As Range
    Dim Chemin As String
     
    Chemin = "C:\...\récapitulatif"
     
     
    With Worksheets("TCDD")
        'Find "Coca cola" in the origin worksheet
        Set cell_ori = .Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole)
     
        'Open the destination workbook => pas très propre mais fonctionne
        On Error Resume Next
        Set Wk = Workbooks("récapitulatif")
        If Err <> 0 Then
            Err = 0
            'MsgBox "Ce fichier est fermé"
            Workbooks.Open Chemin
        Else
            'MsgBox "Ce fichier est ouvert"
        End If
     
        'Find "Coca cola" in the destination workbook in the correct worksheet
        Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole)
     
        'Place the value on the right of both cells
        cell_des.Offset(0, 1) = cell_ori.Offset(0, 1)
     
        'Same with the other value:
        Set cell_ori = .Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole)
        Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole)
     
        cell_des.Offset(0, 1) = cell_ori.Offset(0, 1)
     
    End With
     
    'Save and clothe the Workbook
    'Workbooks("récapitulatif").Close True
     
    End Sub
    Tu dois placer cela dans ton classeur excel "TCD" et executer la macro depuis celui-ci.
    Elle va ouvrir le classeur "récapitulatif" et placer tes valeurs aux bons endroits à condition que:
    1) Tu mettes dans "Chemin" le chemin pour accéder à "récapitulatif"
    2) Tes cellules cibles (celles où se trouvent "Coca cola" et "P&G") se trouvent dans la colonne A
    3) Tes fichiers et onglets s'appellent bien comme l'exemple que tu nous as donné !

    Si tu veux que le classeur "récapitulatif" se ferme après avoir déplacé tes valeurs, tu as juste à décommenter la dernière ligne ! =)

    Dis moi si cela fonctionne !

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 361
    Par défaut
    Super!!!
    Merci beaucoup !
    par contre comment faire pour décaller 2 colonne plus loin les valeurs prélevé dans TCD??

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cell_ori = .Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole)
    Ces lignes de commande scan la colonne A entière. Si tu veux changer cette colonne ramplace seulement les "A" par ce que tu veux. Si tu veux scanner "C", place juste ".Range("C:C")". =)




    Si ce sont les valeurs à droite de "Coca cola" et "P&G" qui sont à deux cases et que tu veux déplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell_des.Offset(0, 1) = cell_ori.Offset(0, 1)
    cell_des est la cellule de destination avec un offset de 1 colonne.
    cell_ori est la cellule d'origine avec un offset de 1 colonne.
    Dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell_des.Offset(0, 1) = cell_ori.Offset(0, 3)
    PS : je n'ai pas bien compris ce que tu voulais ! ^^

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 361
    Par défaut
    Merci beaucoup, c'est bien ça que je cherchais.

    j'aimerais maintenant savoir comment modifier ce code pour que, au cas où je rajouterais une nouvelle société dans les données (en conséquence le TCD s'actualisera) et qu'elle n'est pas au récapitulatif, qu'elle se rajoute automatiquement avec le chiffre correspondant?

    cf pièce jointe svp

    Merciiiii
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Si tu avais pris le temps le lire et de décortiquer le code, tu aurais pu le faire par toi même...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        'Ici, je set la cellule d'origine à l'endoit où je trouve "P&G" dans le classeur d'origine, dans la colonne A
        Set cell_ori = .Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole)
        'Ici, je set la cellule de destination à l'endroit où je trouve "P&G" dans le workbook "récapitulatif", dans l'onglet "Recapitulatif" dans la colonne A
        Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole)
        'Déplace ce qui se trouve à droite de 1 colonne (de la cellule origine) à la cellule qui se trouve à droite de 3 colonnes (de la cellule destination)
        cell_des.Offset(0, 3) = cell_ori.Offset(0, 1)
    Donc si tu veux faire de même pour L'oréal tu rajoutes seulement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set cell_ori = .Range("A:A").Find("L'oréal", LookIn:=xlFormulas, lookat:=xlWhole)
        Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("L'oréal", LookIn:=xlFormulas, lookat:=xlWhole)
        cell_des.Offset(0, 3) = cell_ori.Offset(0, 1)
    En revanche si ton nombre d'entreprises devient très grand, il faudrait p-e les staocker dans un tableau après un premier balayage mais necessite pour le coup d'avantage de code.
    Dans la solution que je t'es proposé, c'est du "brut".

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

Discussions similaires

  1. [Toutes versions] Vba: Copier des lignes sur une autre feuille
    Par yassxavi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/02/2015, 11h48
  2. Réponses: 2
    Dernier message: 01/07/2013, 14h23
  3. Recherche valeurs sur classeur excel et copie sur un autre classeur
    Par lila09 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/10/2011, 20h06
  4. Réponses: 5
    Dernier message: 24/02/2009, 09h05
  5. [VBA-Excel]Copier des cellules vers un autre classeur
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2006, 18h18

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