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 des données excel dans un autre fichier excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Copier des données excel dans un autre fichier excel
    Salut, c'est titemireille!
    bon après avoir dompté VBA word du moins pour mon utilisation, je me lance dans VBA excel.
    alors voila mon problème!
    j'ai un fichier excel test 2 dans lequel j'ai insére un formulaire avec VBA. Je sais, je suis accroc aux formulaires!
    Dans mon formulaire, je demande à l'utilisateur de choisir un mois, de choisir des heures avec des minutes, d'arrivée et de départ, puis de choisir un nom de personne (liste déroulante) pour ouvrir la feuille correspondant à cette personne dans le fichier excel test 1. Je veux non seulement ouvrir la feuille correspondant à la personne mais je veux aussi que les heures ecrites dans test 2 s'ecrivent dans test 1
    Alors j'arrive à bien entrer les heures et les minutes d'arrivée et de départ dans la feuille (mois) choisie de test 2, j'arrive à ouvrir test 1 mais je bloque sur le choix de la feuille (nom) et l'écriture des heures dans test 1.

    voila mon 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
    Private Sub VALIDER_Click()
    'ouverture de la feuille correspondant au début du contrat
    Dim smois As String
    smois = mois
    Sheets(smois).Select
    'écriture des horaires dans les cases
    Cells(3, 3) = arriveelh & arriveelm
    Cells(3, 4) = departlh & departlm
    Cells(4, 3) = arriveemah & arriveemam
    Cells(4, 4) = departmah & departmam
    Cells(5, 3) = arriveemeh & arriveemem
    Cells(5, 4) = departmeh & departmem
    Cells(6, 3) = arriveejh & arriveejm
    Cells(6, 4) = departjh & departjm
    Cells(7, 3) = arriveevh & arriveevm
    Cells(7, 4) = departvh & departvm
     
    'Ouverture du fichier Excel Test 1
    Dim appexcel As New Excel.Application
    'Classeur Excel
     
    Dim wbExcel As Excel.Workbook
    Set wbExcel = appexcel.Workbooks.Open("C:\Documents and Settings\Administrateur\bureau\VBA\TEST1.xls")
    appexcel.Visible = True
    ' choix de la feuille à ouvrir
    Dim ws As Excel.Worksheets
    Dim sam As String
    sam = am
    'écriture des horaires dans les cases
    Sheets(sam).Select
        ActiveCell.FormulaR1C1 = arriveelh & arriveelm
        Range("D4").Select
        ActiveCell.FormulaR1C1 = departlh & departlm
        Range("D5").Select
     
    Unload Me
     
    End Sub
    Le message d'erreur est "9" l'indice n'appartient pas à la selection!
    Voilà, grand merci d'avance pour vos réponses.

    Ah pendant que j'y pense, une autre petite question. Est-il possible quand on a utilisé un formulaire pour remplir une feuille excel de faire apparaitre le formulaire rempli afin d'apporter des modifications ou des ajouts dans la feuille ultérieurement?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    Ton problème de référence vient vraisemblblement d'une des variables globales qui contient un nom non ne correspondant à aucun onglet, pour le classeur actif

    Ta structure de code me fait penser à du OpenOffice, mais si ça fonctionne...

    Évite les déclarations (dim) en plein milieu de ton code

    Pense que nous, nous ne disposons que des infos données dans les postes, et que si tu as des infos extérieures, on est pas forcément équipé pour les trouver (boule de cristal en révision ce mois-ci).

    Pour le formulaire, comme tu as stocké les infos quelque part, il suffit de faire l'opération inverse de la sauvegarde. Mais pour ça, il faut dans les données sauvegardées un "identifiant" permettant de retrouver l'endroit où sont les données précises concernant cet enregistrement

    en gros : Pour sauvegarder t'as des instructions du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A" & X) = me.TextBox_A
    Range("B" & X) = me.TextBox_B
    '..............
    Pour recharger,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for x=1 to [A65536].end(xlup).row
    if identifiant = Range("A" & x) then
    me.TextBox_A = Range("A" & X)
    me.TextBox_B = Range("B" & X)
    '...............
    exit for
    end if
    next x

    NOTA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveCell.FormulaR1C1 = arriveelh & arriveelm
        Range("D4").Select
        ActiveCell.FormulaR1C1 = departlh & departlm
        Range("D5").Select
    Peut être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Range("D4") = arriveelh & arriveelm
         Range("D5") = departlh & departlm
    Sous réserve que l'active cell de la première ligne corresponde bien = D4
    A+

  3. #3
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    C'est probablement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("D3") = arriveelh & arriveelm
    Range("D4") = departlh & departlm
    Salutations

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour
    Merci pour vos réponses toujours aussi rapides.
    je suis désolée pour le manque de précisions, ce n'est pas toujours évident quand on est dans son truc de se faire comprendre.
    je vais essayer d'être plus claire.
    Alors j'ai un classeur "test 2" avec 12 feuilles correspondant au mois de l'année nommé dans les additem "mois", un classeur "test 1" avec 15 feuilles correspondant chacune à une personne nommée dans les additem "am".
    J'ai un userform avec une combobox "mois" pour que l'utilisateur choisisse un mois, puis il choisit des horaires d'arrivée et de départ pour chaque jour de la semaine, puis il choisit une personne dans la combobox "am".
    le code fonctionne très bien dans sa première partie, il inscrit les horaires choisis dans la feuille "mois" choisie par l'utilisateur. Il ouvre bien le classeur test 1. Mais pas contre il ne selectionne pas la feuille "am" choisie par l'utilisateur et comme ça bloque à cet endroit, il n'écrit pas les horaires dans les cases demandées.
    en fait mon problème se situe plus à l'endroit du choix de la feuille à ouvrir dans le classeur test 1.
    Comme je ne peux pas indiquer le nom de la feuille que doit ouvrir le code puisque c'est le choix de l'utilisateur, je ne sais pas comment procéder.
    Voila j'espère que cette fois-ci, j'ai été claire et que vous pourrez m'éclairer.
    merci

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut titemireille et le forum
    Je pense que ton problème vient du fait que le classeur dans lequel tu stockes ta valeur n'est pas le classeur actif :
    Tu n'ouvres pas le Classeur de stockage, tu lances une nouvelle instance de l'application Excel, et tu la charges avec ton Classeur

    Comme c'est une méthode que je n'utilise pas, je ne peux qu'émettre des hypothèses, mais tu peux mettre juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    appexcel.Visible = True
    ' choix de la feuille à ouvrir
    une instruction du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveWorkbook.Name
    et si la boîte de dialogue te mets autre chose que TEST1.xls, c'est que j'ai raison

    Si c'est bien ça, tu ouvres simplement le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbExcel = Workbooks.Open("C:\Documents and Settings\Administrateur\bureau\VBA\TEST1.xls")
    et/ou tu utilises une instruction du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbExcel.sheets(sam).range("D3") = arriveelh & arriveelm
    A+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonsoir et Merci Gorfaël, ça y est j'arrive à écrire dans le classeur test 1 à la page choisie.
    Il ne reste qu'un détail à résoudre, c'est que le classeur test 1 s'affiche toujours à la même page, la première!
    Même si je choisis par exemple la troisième (dron), il écrit les données dans la feuille "dron" mais il reste ouvert à la première page "borne".
    j'aimerai qu'il s'ouvre à la page choisie. j'ai essayé de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         Dim sam As String
        sam = am
        wbExcel.Sheets(sam).Visible = True
        wbExcel.Sheets(sam).Range("C4") = arriveelh & arriveelm
        wbExcel.Sheets(sam).Range("D4") = departlh & departlm
    et bien sur cela ne fonctionne pas. Il n'y a pas de message d'erreur, mais il reste ouvert à la première page
    Alors je fais appel une nouvelle fois à tes lumières.
    merci d'avance
    titemireille

  7. #7
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim sam As String
    sam = am
    wbExcel.Sheets(sam).Visible = True
    wbExcel.Sheets(sam).activate    'peut être
    wbExcel.Sheets(sam).Range("C4") = arriveelh & arriveelm
    wbExcel.Sheets(sam).Range("D4") = departlh & departlm
    salutation

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    mille mercis fred, c'est bon.
    j'ai enlevé visible et je l'ai remplacé par activate.
    merci à tous pour votre aide

  9. #9
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir

    la propriété visible d'une feuille à 3 cas
    Visible (true = -1)
    hidden (false = 0)
    veryhidden (2) 'on ne peut pas la visualiser depuis Excel que depuis vba en modifiant la propriété visible

    et en aucun cas active la feuille

    tu peux aussi utiliser application.goto adresse, scroll (true ou false)


    Application.Goto .Sheets(sam).Range("C4"), False

    Salutations

    N'hésite pas à mettre Résolu si c'est le cas.

    fred65200

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

Discussions similaires

  1. [XL-2007] Macro: comment importer des valeurs de fichiers Excel vers un autre fichier Excel?
    Par jerdel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2012, 16h23
  2. Réponses: 2
    Dernier message: 14/02/2011, 19h30
  3. Réponses: 3
    Dernier message: 25/11/2010, 12h12
  4. Réponses: 12
    Dernier message: 22/03/2010, 14h07
  5. Réponses: 5
    Dernier message: 24/02/2009, 09h05

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