Création d'une macro

Bonjour,

Je travaille sur un document excel afin de faire de la facturation et je voudrais savoir si il est possible de faciliter cette facturation à l'aide d'une macro.

Je m'explique, mon document se compose :

- d'une première feuille qui contient la base de donnée avec les renseignements des personnes à facturer, nom, adresse ...

- d'une seconde feuille qui est ma facture mise en page et prête à imprimer, lorsque je rentre le nom d'une personne dans une cellule particulière la totalité de la facture se remplie selon la base de donnée, à l'aide de la fonction =recherchev liée à la feuille 1.

Mon idée serait de créer une macro qui ferait descendre d'une ligne à la fois la première colonne de ma première feuille et d'affecter cette macro a une forme de flèche sur ma feuille n°2.

Je ne sais pas si c'est très clair, mais lors de ma facturation je rentre la formule ='Feuille1'!A1 qui correspond au premier nom de ma liste, l'idée serait qu'en appuyant sur un "bouton" la formule devienne ='Feuille1'!A2 et ainsi de suite, tout en restant sur la feuille de facturation, pour ne pas avoir à changer de feuille à chaque fois ce qui me fait perdre un temps fou.

C'est la première fois que je pose une question ici, j'espère avoir été assez claire et que quelqu'un arrivera à résoudre mon problème.

Merci beaucoup d'avance

2 réponses

  1. Bonjour à tous les deux

    Pas très clair, et si macro il doit y avoir, il faut connaitre la structure exacte des données
    Peux tu envoyer un bout de ton fichier sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    1
    1. Bonjour,

      Dans ta feuille 2, insert un flèche. Ensuite clic droit sur ta flèche puis "Affecter une macro...", "Nouvelle"

      Puis colle ça :

      Sub Descendre()

      Sheets("Feuil1").Select 'Selection de la feuille 1
      Rows("1:1").Select 'Selection de la ligne 1
      Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'Insertion d'une nouvelle ligne
      Range("A1").Select
      Sheets("Feuil2").Select 'Selection de la feuille 2

      End Sub

      Si un message du style : "L'indice n'appartient pas à la sélection, modifie le nom des feuilles (Feuil1, Feuil2) entre guillemets dans la macro.

      J'espère que c'est bien ce que tu souhaitais ;)
      1
      1. Merci de votre réponse, je viens d'essayer mais ce n'est pas tout à fait ce dont je parlais, je pense que j'ai du mal à expliquer mon idée.

        L'idée est de se placer dans la colonne 1 et de descendre de ligne simplement, la feuille 1 est remplie de données et je voudrais qu'en cliquant sur ma forme, la cellule sélectionnée sur ma première feuille descende.

        En gros, que ma cellule dans la feuille 2 passe de =Feuille 1 A1 à = Feuille 1 A2 et ainsi de suite
        0
      2. Essaye avec ça :

        Sheets("Feuil1").Select
        ActiveCell.Offset(1, 0).Select
        Sheets("Feuil2").Select

        Par contre sélectionne bien une cellule A, car la macro sélectionne la cellule en dessous de la cellule active (la cellule sélectionnée au départ)
        0
      3. Merci pour votre aide, j'ai trouvé une solution

        Sub Facture()
        Dim Plage As Range, C As Range
        With Sheets("BDD 2018")
        Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Facture")
        If .[E6] = "" Then
        .[E6].Value = Plage(1, 1)
        Else
        Set C = Plage.Find(.[E6])
        If C Is Nothing Then
        MsgBox "Saisie incorrecte"
        Exit Sub
        End If
        Set C = C.Offset(1)
        If C = "" Then
        MsgBox "Traitement terminé"
        Exit Sub
        Else
        .[E6] = C.Value
        End If
        End If
        End With
        End Sub
        0