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 :

Création d'une macro pour remplissage auto


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut Création d'une macro pour remplissage auto
    Bonjour à toutes et à tous,

    Bon je vous propose un nouveau défi. Je pense que c'est faisable, et jusqu'à maintenant vous avez toujours trouvé des solutions à mes problèmes de macro, donc je compte sur vous.

    Je souhaite que ma feuille « Diffusion facture » se complète automatiquement. Je choisi dans la liste déroulante mon numéro de commande et je lance ma macro et là toutes les données sont récupérées dans la feuille de commande correspondante.

    Je pousse le bouchon un peu plus loin => lorsque je lance la macro j’aimerai que la date du jour s’inscrive dans la case « Arrivée Assistante »

    Je vous mets en pièce jointe un extrait de mon tableau (car le tableau complet est trop volumineux) à savoir qu'il y a des feuilles qui vont de 001=>085 (voir plus) que j'ai aussi une feuille "Modèle" et une feuile "Recap" la liste des factures (pour lancer la macro) est basé sur cette feuille.

    Merci de vos réponses,

    Bon week end

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

    Sous réserve d'avoir bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Diffusion Facture").Cells(54, 3) = Format(Now, "dd/mm/yyyy")

  3. #3
    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 Laura-c, jacques_jean et le forum
    Sous réserve d'avoir bien compris
    idem, avec une autre proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    With Sheets("Diffusion Facture").Range("C54").MergeArea
        .Value = Date
        .NumberFormat = "dd/mm/yyyy"
    End With
    End Sub
    petite remarque : tu copies une feuille modèle du classeur. Regarde le nom informatique : je crois que quand il arrive à 32 lettres, il se bloque et te génère une erreur
    A+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Bonjours à tous,

    La partie de la macro que vous me donner me permet seulement d'avoir la date qui se complète.
    Mais ce qui m'intéresse réellement c'est la récupération des infos (selon le n° de commande)qui se trouvent dans les différentes feuille (de 001 à 085), et qu'elles se réinscrive dans la feuille "diffusion facture"

    Je ne sais pas si je suis bien clair...

    Merci de votre aide

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    les numéro de factures c'est quoi exactment?
    Alleï Bonjour chez vous!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Le numéro des factures est très variable, tout dépend du fonctionnement du fournisseur. Le numéro de commande garde toujours le même format XXXXX/001 , XXXXX/002...XXXXX/090 (où XXXXX est toujours le même numéro)

    Je souhaite que l'info soit récupéré par rapport au nom des colonnes.

    Ma fiche de commande est complétée, je vais sur ma fiche diffusion de facture, je choisie mon numéro de commande, je lance la macro (et selon l'intitulé de mes colonnes) elle récupére les infos...

    Facile à expliquer mes pas facile à faire...

  7. #7
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    l'entièreté des info ou seulement une partie?

    sinon, tu peux tjs passer par une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub tofact(num As Variant)
     
    Sheets(num).Range("A11:D30").Copy
    Sheets("Diffusion Facture").Range("A11").PasteSpecial xlPasteValues
    Sheets(num).Range("G22:J30").Copy
    Sheets("Diffusion Facture").Range("F22").PasteSpecial xlPasteValues
    Sheets(num).Range("E22:E30").Copy
    Sheets("Diffusion Facture").Range("E22").PasteSpecial xlPasteValues
     
     
    End Sub
    ceci dis, moi je ne coderais rien en vba pour cette partie
    un VLookUp ou RechercheV suffit amplement
    Alleï Bonjour chez vous!

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    je ne pense pas qu'il faut utilisé une rechercheV, car je devrais mettre à jour la formule, à chaque fois que je rajoute une feuille de commande.

    Je pensais plus à une macro qui aurait une partie écrite de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each f In Workbooks("Suivi dépenses + heures + acomptes.xls").Worksheets 'Chaque onglet est passé
                If f.Name <> "RECAP" And f.Name <> "MODELE" Then 'on execute que si diferent de Recap et Modele
    Mais je ne sais pas lui expliquer qu'il doit aller chercher les infos dans les feuilles de commande, selon les intitulés de colonnes qu'il y a dans "Diffusion facture"et les coller dans cette même feuille.

  9. #9
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    désolé mais suivant ta logique, si on met cette formule dans la cellule B11 par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =HLOOKUP($B$10;INDIRECT(RIGHT($B$4;3)&"!A10:E18");ROW()-10;FALSE)
    ben il n'y a pas de raison que ça ne fonctionne pas, même si tu rajoute une feuille.
    Alleï Bonjour chez vous!

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Je ne comprends et ne connais pas cette formule. Comment dois-je l'utilisé?

    Je récapitule en utilisant cette formule, je n'aurais qu'à choisir dans ma liste déroulante mon numéro de commande, soit XXXX/001, et elle ira chercher automatiquement dans la feuille 001 les infos correspondantes?? Et ainsi de suite pour toutes mes autres commandes...

  11. #11
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,
    Je ne comprends et ne connais pas cette formule. Comment dois-je l'utilisé?
    je te l'explique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =HLOOKUP($B$10;INDIRECT(RIGHT($B$4;3)&"!A10:E18");ROW()-10;FALSE)
    nous avons tout d'abord un Hlookup ( cela devrait etre rechercheH en français)

    pour rappel, cette fonction consiste a faire une recherche horizontale sur la prmière migne d'un tableau et en donne l'offset correspondant.

    en bleu, la valeur a rechercher, en vert le tableau de recherche, en orange l'offset, false recherchera l'exacte valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =HLOOKUP($B$10;INDIRECT(RIGHT($B$4;3)&"!A10:E18");ROW()-10;FALSE)
    INDIRECT ( je n'ai pas la correspondance française en tête) permet de transformer une ligne de texte en référence) donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INDIRECT(RIGHT($B$4;3)&"!A10:E18");
    en bleu, on récupere les trois dernier chiffres de la valeur contenue dans le menu déroulant. cela correspont au nom de la feuille dont on a besoin.
    à cela, on ajoute un poin d'exclamation et la référence à la table.

    Ici, on doit lui donner l'offset.
    pourquoi une formule?
    comme ça on peux la "tirer" plus facilement.
    row renvoie le numéro de la ligne
    donc comme on sait que le tableau commence à la ligne dix, on soustrait le reste, constitue l'offset.

    pou rla deuxième question , la réponse est évidemment oui!

    voilà, j'espère avoir été clair.
    sinon ben n'hésite pas.
    Alleï Bonjour chez vous!

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Je suis désolé mais je n'arrive pas à appliquer ta formule pour qu'elle aille chercher l'info dans la bonne page.

    Si quelqu'un à une autre idée, à savoir que je ne suis pas spécialement pour appliquer des formules partout...

    merci de votre aide

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Re bonjour,
    Vu que je n'arrive pas à utiliser la formule, et que je préfére mettre une macro voici ce que j'ai écrit pour mon copier/coller, cela fonctionne pour ma feuille 001 (normal je ne fais référence qu'à celle ci), mais comment lui dire que selon le numéro sélectionné dans ma liste déroulante qui se trouve en B4, je veux qu'il récupére les infos??

    Merci de votre aide

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub test_4()
    '
    ' test_4 Macro
    ' Macro enregistrée le 18/06/2008 par ...
    '
     
        Sheets("001").Select
        Range("B3").Select
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("B6").Select
        ActiveSheet.Paste
     
        Sheets("001").Select
        Range("B5").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("B8").Select
        ActiveSheet.Paste
     
        Sheets("001").Select
        Range("E1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("E4").Select
        ActiveSheet.Paste
     
        Sheets("001").Select
        Range("H1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("H4").Select
        ActiveSheet.Paste
     
        Sheets("001").Select
        Range("A11:D18").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("A11").Select
        ActiveSheet.Paste
        ActiveWindow.SmallScroll Down:=3
        Range("A21").Select
     
        Sheets("001").Select
        Range("A22:E30").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("A21").Select
        ActiveSheet.Paste
     
     
        Sheets("001").Select
        Range("G22:J30").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Diffusion Facture").Select
        Range("F21").Select
        ActiveSheet.Paste
        ActiveWindow.SmallScroll Down:=-5
    End Sub

  14. #14
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour, quelque chose dans ce genre devrait t'aider!

    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
    Sub test_4()
    '
    ' test_4 Macro
    ' Macro enregistrée le 18/06/2008 par ...
    '
    dim source as worksheet
    dim destination as worksheet
     
    set destination=sheets("Diffusion Facture")
    set source=sheets(range("b4"))
     
    source.range("B3").copy destination.range("B6")
    source.range("B5").copy destination.range("B8")
    source.range("E1").copy destination.range("E4")
    source.range("H1").copy destination.range("H4")
    source.range("A11:D18").copy destination.range("A11")    
    source.range("A22:E30").copy destination.range("A21")
    source.range("G22:J30").copy destination.range("F21")
     
    End Sub
    Alleï Bonjour chez vous!

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Merci mayekeul c'est presque parfait.
    En faite dans ma liste déroulante c'est le numéro de commande, chaque feuille porte le numéro de commande, je souhaite qu'il colle ces infos, alors que pour le moment il colle les infos de la feuille se trouvant par exemple en position 2 (dans les onglets) et non pas de la commande 2.

    Peut on aussi lancer la macro dès que j'ai fait mon choix dans la liste déroulante, et ne plus lancer la macro manuellement?

    Merci d'avoir réduit ma macro je me doutais qu'il y avait une méthode mais ne connaissant pas bien le langage VBA c'est la seule chose que j'avais trouvé

  16. #16
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Peut on aussi lancer la macro dès que j'ai fait mon choix dans la liste déroulante, et ne plus lancer la macro manuellement?
    si j'ai bien compris, ton menu déroulant est une liste de validation, exact?
    donc tu doit ajouter ceci dans l'événement change de la feuille.
    sub worksheet_change(byval target as range)
    if target=cells(4,2) then LaMAcro
    end sub
    Alleï Bonjour chez vous!

  17. #17
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    si j'ai bien compris, ton menu déroulant est une liste de validation, exact?
    Oui c'est tout à fait ça

    pour le moment il colle les infos de la feuille se trouvant par exemple en position 2 (dans les onglets) et non pas de la commande 2.
    Peux tu m'aider pour cette partie

    donc tu doit ajouter ceci dans l'événement change de la feuille.
    sub worksheet_change(byval target as range)
    if target=cells(4,2) then LaMAcro
    end sub
    Je n'arrive pas à la faire fonctionner, dois-je remplacer LaMAcro par le nom de ma macro??

    Merci de ton aide

  18. #18
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    oui, dans l'exemple, ce serait test_4

    Citation:
    pour le moment il colle les infos de la feuille se trouvant par exemple en position 2 (dans les onglets) et non pas de la commande 2.

    Peux tu m'aider pour cette partie
    oui mais j'ai pas tout compris lol!
    Alleï Bonjour chez vous!

  19. #19
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 105
    Points : 35
    Points
    35
    Par défaut
    Quand je lance la macro elle fonctionne pour quelque ligne puit j'ai un message d'erreur d'exécution 13 qui apparait (incompatibilité de type)... de quoi cela peut-il venir

    Citation:
    Citation:
    pour le moment il colle les infos de la feuille se trouvant par exemple en position 2 (dans les onglets) et non pas de la commande 2.

    Peux tu m'aider pour cette partie

    oui mais j'ai pas tout compris lol!


    Dans ma liste déroulante voici ce qui apparait
    XXX/001
    XXX/002
    XXX/003
    ...
    XXX/085 (voir plus)

    Mes feuilles s'appellent donc respectivement 001, 002, 003, ... , 085
    Donc quand je clique sur un numéro dans ma liste exemple XXX/003 je veux que la macro colle les info de la feuille 003. mais pour le moment elle récupére les infos de la feuille positionné en n°3 dans les ongles soit les info de la commande 002, puisque
    onglet 1 = Diffusion facture
    onglet 2 = 001
    onglet 3 = 002
    onglet 4 = 003...

  20. #20
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    ok je comprendre
    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
    Sub test_4()
    '
    ' test_4 Macro
    ' Macro enregistrée le 18/06/2008 par ...
    '
    dim source as worksheet
    dim destination as worksheet
    dim fe as string
    fe=right(range("B4").value,3) 
    set destination=sheets("Diffusion Facture")
    set source=sheets(fe)
     
    source.range("B3").copy destination.range("B6")
    source.range("B5").copy destination.range("B8")
    source.range("E1").copy destination.range("E4")
    source.range("H1").copy destination.range("H4")
    source.range("A11:D18").copy destination.range("A11")    
    source.range("A22:E30").copy destination.range("A21")
    source.range("G22:J30").copy destination.range("F21")
     
    End Sub
    ça devrais le faire!
    Alleï Bonjour chez vous!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Création d'une macro pour une récapitulation
    Par nicole6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/11/2013, 14h25
  2. [XL-2007] création d'une macro pour mettre à jour une BDD
    Par morguie31 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/11/2012, 16h10
  3. Création d'une macro pour générer un xml depuis excel
    Par vieri dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2011, 09h46
  4. [XL-97] Macro pour remplissage auto avec choix multiple
    Par sniper22ch206 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/03/2011, 18h49
  5. [XL-2003] création d'une macro pour formulaire
    Par Amadeon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/05/2010, 12h56

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