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 :

Bouton pour transférer des données d'un fichier Excel 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 averti
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut Bouton pour transférer des données d'un fichier Excel vers un autre
    Bonjour à tous,

    Je souhaiterai insérer, sur une page excel, un bouton qui me permette de transférer des données vers un autre fichier SI certaines cellules sont remplies.
    En effet, j'ai deux fichiers et je dois recopier bcp de données du fichier1 vers le fichier2 avec les risques d'erreur que cela comporte. Je voudrais donc automatiser la copie des données.

    Ex. :
    Si la cellule G15 de mon fichier1 est remplie et que j'appuie sur mon bouton "transfert de données", les données contenues dans les cellules A15, C15, D15 du fichier1 sont envoyées dans les cellulles A1, C1, D1 de mon fichier2.

    Est-ce que vous pourriez m'aider à faire la macro s'il vous plait ? Je ne suis pas du tout experte en VB...

    Un grand merci par avance pour votre aide.

    Cordialement,

    Alfred

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    On ne refusera pas de t'aider mais on n'est pas là non plus pour te cracher le code directement.

    Pour commencer tu peux utiliser l'enregistreur de macros (Outils->Macro->Nouvelle Macro...) pour générer automatiquement un code des actions que tu veux réaliser.

    Après Outils->Macro->Macros... (ou Alt+F8), tu sélectionnes la macro que tu viens d'enregistrer et tu cliques sur 'Modifier'.

    Essaie alors de modifier la macro pour l'adapter à tes besoins et reviens demander de l'aide ici quand tu coinces (en décrivant ce qui ne va pas, où ça se produit, dans quelles circonstances...).

    Bon courage!

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut
    Bonjour,

    J'ai dû mal m'exprimer parce que je n'attendais pas que vous me "crachiez le code directement".
    Excusez moi.

    Je voulais surtout, dans un premier temps, savoir si ce que je voulais faire était possible et comment faire pour mettre des conditions.

    Je vais continuer à chercher.

    Cordialement,
    Alfred

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    C'est tout à fait faisable et même pas bien sorcier en VBA.

    Pour le bouton: Affichage -> Barres d'outils -> Boîte à outils Contrôles, puis dans cette barre d'outil, sélectionne un contrôle "bouton de commande" (l'icône est un rectangle gris) que tu places où tu veux sur ta feuille.

    De l'autre côté tu peux écrire une macro qui teste le contenu de tes cellules (avec des structures du style If [condition] Then [action1] Else [action 2] End If) et qui copie tes cellules.

  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut
    Bonjour,

    Et merci pour vos réponses.

    J'étais exactement en train de faire ce que vous dites, mais j'ai vraiment du mal.

    Je ne suis pas certain de placer les instructions au bon endroit...

    En fait, j'ai bien mis un bouton sur la feuille, mais comme je voulais ajouter une condition, je suis un peu perdu...

    Pour l'instant, je n'ai pas encore copié les données des cellules, je fais juste des tests avec une message box.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_change(ByVal Target As Range)
     
    If Target.Column = 14 Then
     
          MsgBox "Vous venez de modifier la cellule " & Target.Address & " (" & Target.Value & ")"
     
     
    End If
     
     
    End Sub
    Ça fonctionne bien, mais je n'arrive pas à relier ça au bouton. Quand je fais : "affecter la macro > nouvelle" ça m'ouvre un module. Or, le code ci-dessus ne se trouve pas dans ce module.

    Autre question, sans doute idiote, mais bon... Il faut bien débuter... Est-ce qu'on peut imbriquer les Sub ?

    Merci d'avance.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 33
    Par défaut
    Bonjour,

    Vous ne pouvez pas attribuer la procédure que vous avez écrite au bouton car vous avez écrit votre code dans une procédure associé à un événement possédant un paramètre (Target).

    Pour associer une macro directement à un bouton de type formulaire que vous semblez avoir crée, il faut que la procédure soit sans paramètre et doit être publique.
    (il y a aussi l'option du bouton en ActiveX et la rédaction de la procédure évenementielle _onClick)

    quand à imbriquer des Sub, j'avoue ne pas bien comprendre ou vous voulez en venir...

    Cordialement.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Citation Envoyé par Alfred23 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_change(ByVal Target As Range)
     
    If Target.Column = 14 Then
     
          MsgBox "Vous venez de modifier la cellule " & Target.Address & " (" & Target.Value & ")"
     
     
    End If
     
     
    End Sub
    Ça fonctionne bien, mais je n'arrive pas à relier ça au bouton. Quand je fais : "affecter la macro > nouvelle" ça m'ouvre un module. Or, le code ci-dessus ne se trouve pas dans ce module.
    -> En fait pour affecter ta macro au bouton de contrôle, désactive le mode Création dans la barre d'outils contrôles (l'icône avec une équerre, une règle et un crayon; si le mode est activé l'arrière plan de cette icône est en orange) et double-clique sur ton bouton.
    Normalement ça devrait automatiquement te placer dans la procédure correspondant à l'évènement "clic sur ce bouton". Il ne te reste alors plus qu'à taper ta procédure à cet endroit et elle sera exécutée lorsque tu cliques sur le bouton.



    Citation Envoyé par Alfred23 Voir le message
    Autre question, sans doute idiote, mais bon... Il faut bien débuter... Est-ce qu'on peut imbriquer les Sub ?
    C'est pas du tout idiot comme question. La réponse est oui et non!

    En fait, toutes les procédures (sub) et fonctions (function) sont déclarées séparément mais tu peux ensuite appeler n'importe laquelle depuis une autre.

    Exemple schématique:

    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
     
    Sub procédurePrincipale()
     
    [...]
     
    procédureSecondaire() 'Appel de la procédure secondaire au sein de la procédure principale
     
    [...]
     
    End Sub
     
     
     
    Sub procédureSecondaire()
     
    [...]
     
    End Sub
    Explication: chaque procédure est déclarée séparément (entre Sub machin() et End Sub).

    Au sein de ma procédure principale, j'appelle ma procédure secondaire. A ce moment là, l'exécution de la procédure principale est "mise en pause", la procédure secondaire est appelée, exécutée et une fois qu'elle s'est terminée l'exécution de la procédure principale reprend.

    Il est très fortement recommandé d'utiliser ce genre de structure car cela améliore grandement la clarté du code et permet souvent d'en réduire la longueur (si la procédure secondaire est appelée au moins 2 fois à des endroits différents dans la procédure principale).

    J'espère avoir été assez clair...n'hésite pas à demander des éclaircissements sur ce que tu ne comprends pas.

Discussions similaires

  1. [XL-2007] Envoyer des données d'un fichier excel vers un autre fichier
    Par Langelusyfaire dans le forum Excel
    Réponses: 24
    Dernier message: 22/04/2014, 11h19
  2. [XL-2002] Recuperer des données d'un fichier excel vers un autre
    Par labinocle81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/08/2009, 11h36
  3. copier des données d'un Fichier Excel à un a autre automatiquement
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 21/05/2008, 10h45
  4. Importer des données d'un fichier Excel vers Javascript
    Par rafiq25 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/01/2008, 15h30
  5. Réponses: 1
    Dernier message: 14/05/2007, 14h52

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