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 :

formulaire à partir d'une liste dans différent fichiers [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut formulaire à partir d'une liste dans différent fichiers
    Bonjour à tous,

    Tout d'abord, merci à tous ceux qui vont prendre la peine d'essayer de m'aider.

    Voila, je voudrais avec une liste, remplir un formulaire puis enregistrer un fichier par ligne de la liste... je m'explique:

    j'ai une liste du genre:
    Nom Prénom Age Ville Métier
    Bernard Dupont 45 Paris Comptable
    Jules Dupond 30 Lyon Banquier

    Et le but est d'avoir un fichier avec une mise en forme et qu'il mette en place les noms prénoms etc (genre publipostage), à la bonne place et créer un fichier différent pour pouvoir les enregistrer dans différents fichiers de type [nom]-[prénom]-[ville].xls correspondant à une ligne

    Merci pour votre aide

    Cordialement

    Avinetor

  2. #2
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour Avinetor,

    J'ai fait recemment une marco du même genre.
    Je t'explique ma méthode ça te donnera une piste mais je suis débutant donc il y a surement moyen de faire mieux.

    En fait il faut d'abord créer un fichier xls avec la mise en forme souhaité pour ton publipostage (ou autre).

    Ensuite dans ton fichier "base de donnée" ou il y a la liste Nom, Prenom, Age... Il faut que tu crée une macro comme celle ci :

    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
    sub publipostage ()
    Dim i as integer
    Dim wb as workbook
     
    i = 2 'pour que ta boucle ne passe pas sur la ligne de titre
    Set ws = ActiveWorkbook
     
     
    Do While Cells(i, 1)<>""
     
    'on ouvre le fichier avec la mise en forme souhaité
    Workbooks.Open Filename:="chemindufichier\miseEnFormeAremplir.xls"
    Windows("miseEnFormeAremplir.xls").Activate
     
    'on remplit les cellule du fichier mis en forme avec les données de ta liste
    Range("cellule Nom à remplir").value = wb.Range(i, 1).value
    '.....
    'ainsi de suite pour tous les champs de la ligne
    '.....
     
    'on sauvegarde le fichier avec le nom voulu
    ActiveWorkBook.SaveAs Filename:="chemindudossierOuTuVeuxEnregistrer\" & cells(i, 1).value & cells(i, 2).value & cells(i, 3).value & ".xls"
    ActiveWorkBook.Close SaveChanges:=wdDoNotSaveChanges
     
    i = i + 1
     
    Loop
     
    End Sub

    Voila c'est juste une base à adapter, j'espére que ça t'aidera.
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup,

    On dirait que c'est ce que je veux faire...
    Par contre j'ai un petit souci:
    Dans cette partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'on remplit les cellule du fichier mis en forme avec les données de ta liste
    Range("cellule Nom à remplir").value = wb.Range(i, 1).value
    Il faut remplacer cellule Nom à remplir par quoi? j'ai essayer de mettre (1, 1) pour faire apparaitre le nom dans la première cellule mais ça ne fonctionne pas, j'ai aussi essayer de nommer une cellule (Nom) et de le remplacer mais ça ne fonctionne pas non plus

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    On écrit pour avoir le contenu de la cellule A1 ou bien pour avoir exactement la même chose (ligne,colonne contrairement aux Range).

    Est-ce ce que tu souhaitais ?

    Bon Ludni

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Ben je pense bien mais quand j'exécute la macro, il me dit Erreur d'ecécution '91'
    Variable objet ou variable de bloc With non définie

    Alors je clique sur Débogage et il me surligne cette ligne là,
    Quelqu'un voit le problème?

    Merci

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,


    Quelqu'un voit le problème?
    Montre nous la ligne que l'on puiss répondre :

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = wb.Range(i, 1).Value
    C'est pour que la cellule d'une feuille se copie vers un autre fichier

    Tanks

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Mais bien sûr !!!

    C'est tout à fait normal ! Tu as mais où est-ce que ton wb est défini ? A quoi correspond-il ? Bref, ça ne risque aps de marcher

    Bref, écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("LeNomDuWorkbookOuTuVeuxRemplirA1").Range("A1").Value = Workbooks("LeNomDeTonWorkbookSource").Range(i, 1).Value
    En gros, ws est le raccourci pour ton ActiveWorkbook et wb est le raccourci pour rien du tout pour l'instant. Il te faut l'attribuer si tu veux l'utiliser.

    Bonne fin de journée

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    De plus, à mon avis pour utiliser "Range" avec un N° de ligne et de colonne, je crois qu'il faut définir une plage, même s'il s'agit d'une seule cellule, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Sheets("mafeuil").Range(cells((i, 1), cells(i, 1)).Value
    Je me trompes ?

    sinon, utiliser une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myvar = Sheets("mafeuil").cells'i, 1)
    Range("A1").Value = myvar

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    le wb c'est le nom du fichier?
    ou faut mettre wb et ws dans les parenthèses?

    Citation Envoyé par DeaD78 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("LeNomDuWorkbookOuTuVeuxRemplirA1").Range("A1").Value = Workbooks("LeNomDeTonWorkbookSource").Range(i, 1).Value
    Il faut remplacer ("LeNomDuWorkbookOuTuVeuxRemplirA1") par quoi et ("LeNomDeTonWorkbookSource") par quoi?

    Merci

    J'ai essayer un peu toutes les combinaisons possible, ya rien qui marche...
    Quelqu'un peu m'aider?

    Merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    J'ai l'impression que vous n'avez pas essayé toutes les combinaisons possibles et même que vous n'avez pas bien lu toutes les réponses.

    Si j'ai raison, repassez en revue les réponses, essayez d'en retirer ce qui est valable pour votre problème avant d'appeler à nouveau à l'aide.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Si j'ai bien compris je dois créer un workbook du fichier créer?
    Comment le faire? je suppose que c'est avec la fonction set (le nom du WB) = (???)

    Voila où j'en suis arriver mais là vraiment je bloque je cherche juste à ce que l'on m'aiguille...
    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
     
    Sub publipostage()
    Dim i As Integer
    Dim wb As Workbook
     
    i = 2 'pour que ta boucle ne passe pas sur la ligne de titre
    Set ws = ActiveWorkbook
    Set wb = ThisWorkbook
     
    Do While Cells(i, 1) <> ""
     
    'on ouvre le fichier avec la mise en forme souhaité
    Workbooks.Open Filename:="C:\Documents and Settings\Gauthier\Bureau\Stage\Feuille1.xls"
    Windows("Feuille1.xls").Activate
     
    'on remplit les cellule du fichier mis en forme avec les données de ta liste
    Workbooks("ws").Range("A1").Value = Workbooks("wb").Sheets("Feuil1").Range(Cells(i, 1), Cells(i, 1)).Value
    '.....
    'ainsi de suite pour tous les champs de la ligne
    '.....
     
    'on sauvegarde le fichier avec le nom voulu
    ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\Gauthier\Bureau\Stage" & Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value & ".xls"
    ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChanges
     
    i = i + 1
     
    Loop
     
    End Sub
    L'outil débogage me met toujours la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("ws").Range("A1").Value = Workbooks("wb").Sheets("Feuil1").Range(Cells(i, 1), Cells(i, 1)).Value
    En surbrillance.

    Est-ce que les workbook sont bon? que peut-il y avoir, je suis vraiment débutant, j'ai essayer de chercher dans les tutos, d'autre forum mais je ne trouve pas de solution.
    Puis juste avoir un petit coup de pouce?

    Merci beaucoup

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(ws).Range("A1").Value = Workbooks(wb).Sheets("Feuil1").Range(Cells(i, 1), Cells(i, 1)).Value
    On ne met pas de guillemets dans ce cas où le nom du workbook est stocké dans une variable !

    De plus, à quoi sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(i, 1), Cells(i, 1)
    Remplace par C'est la même chose et ça sera plus simple.

    Enfin, tout dépend des workbooks sur lesquels tu souhaites opérer lorsque tu définis ws et wb. Dans ton cas, ws et wb pourraient correspondre exactement au même workbook (je t'avoue, je n'ai pas regardé). Bref, fais bien gaffe que ce soient bien ceux que tu souhaites.

    En gros, tu devrais avoir Set ws = "Test" A la place de Test, tu mets le nom du workbook où tu as mis ta macro.

    Puis, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Feuille1.xls").Activate
    mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Feuille1").activate
    Et après tu peux enfin mettre ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wb = ActiveWorkbook
    Bref, en gros, au final tu devrais tomber sur ça :
    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
    Sub publipostage()
    Dim i As Integer
    Dim wb As Workbook
    Dim ws as Workbook
     
    i = 2 'pour que ta boucle ne passe pas sur la ligne de titre
    Set ws = "Test" 'Le nom du workbook où tu as mis ta macro : ici il s'appelerait Test.xls
     
    Do While Cells(i, 1) <> ""
     
    'on ouvre le fichier avec la mise en forme souhaité
    Workbooks.Open Filename:="C:\Documents and Settings\Gauthier\Bureau\Stage\Feuille1.xls"
    Workbooks("Feuille1").Activate
    Set wb = ActiveWorkbook
     
    'on remplit les cellule du fichier mis en forme avec les données de ta liste
    Workbooks("wb").Range("A1").Value = Workbooks("ws").Sheets("Feuil1").Range("A"&i).Value
    '.....
    'ainsi de suite pour tous les champs de la ligne
    '.....
     
    'on sauvegarde le fichier avec le nom voulu
    ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\Gauthier\Bureau\Stage" & Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value & ".xls"
    ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChanges
     
    i = i + 1
     
    Loop
     
    End Sub
    Sinon, je lis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChanges
    Es-tu sûr de ne pas vouloir sauvegarder tes modifications ?

    Bref, plus mâché que ça on ne peut pas faire. Dis-nous si ça amrche et bonne nuit !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Bon j'y ai passé la journée mais j'ai réussi à faire ce que je voulais...

    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
    Sub publipostage()
    Dim i As Integer
    Dim wb As Workbook
    Dim Name
     
    i = 4
    Set ws = ActiveWorkbook
     
    Do While Cells(i, 1) <> ""
     
    Workbooks.Open Filename:="H:\MSN\re-allocation form.xls"
    Windows("Base de données.xls").Activate
    myvar1 = Cells(i, 3).Value
    myvar2 = Cells(i, 4).Value
    myvar3 = Cells(i, 5).Value
    myvar4 = Cells(i, 6).Value
    myvar5 = Cells(i, 7).Value
    myvar6 = Cells(i, 8).Value
    myvar7 = Cells(i, 2).Value
    myvar8 = Cells(i, 1).Value
     
    Windows("re-allocation form.xls").Activate
    Range("D3").Value = myvar1
    Range("F3").Value = myvar2
    Range("D4").Value = myvar3
    Range("D8").Value = myvar4
    Range("D10").Value = myvar5
    Range("F10").Value = myvar6
    Range("H10").Value = myvar7
     
    Cells(4, 7) = Date
     
    Name = myvar1 & "-" & myvar4 & "-" & myvar5 & "-" & myvar6
     
    ActiveWorkbook.SaveAs Filename:=myvar8 & "\" & Name & ".xls"
    ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChangesz
     
    i = i + 1
     
    Loop
     
    Message = MsgBox("Fichiers créer dans le répertoire " & myvar8 & "")
     
    End Sub
    Le fichier marche bien.
    Merci à tous
    DeaD78, je vais prendre tes dernières remarques pour essayer d'améliorer mon code. merci beaucoup

    En ayant bien cherché par moi même sans internet, j'ai pas mal progressé (juste avec l'aide windows qui n'est pas superbe...)

    Encore merci à tous et à bientot

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2009, 12h26
  2. Stocker une liste dans un fichier
    Par Knuckles dans le forum Général Python
    Réponses: 1
    Dernier message: 29/05/2006, 08h08
  3. Ecrire le contenu d'une List dans un fichier
    Par sabure dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/05/2006, 16h33
  4. Réponses: 32
    Dernier message: 22/09/2005, 10h40
  5. Réponses: 4
    Dernier message: 10/02/2005, 16h10

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