Création automatique de feuille par ligne saisie

Murielmerle

XLDnaute Nouveau
Bonjour à tous,

Je souhaite créer automatiquement une nouvelle feuille (=facture) par ligne saisie dans un tableau excel et qu'elle se nomme automatiquement en fonction du nom du client. (Environ 200 clients soit 200 feuilles à créer)

Je sais qu'il serait plus intelligent d'effectuer un publipostage avec Word mais il faut absolument que cela soit fait dans excel.

Merci d'avance pour votre aide.
 

ROGER2327

XLDnaute Barbatruc
Re : Création automatique de feuille par ligne saisie

Bonsoir Murielmerle
En l'absence de support et de description précise des contraintes, une ébauche vague…​
ROGER2327
#5200


Mercredi 11 Clinamen 138 (Saint Maquereau, Intercesseur, SQ)
13 Germinal An CCXIX
2011-W13-6T23:39:19Z
 

Fichiers joints

ROGER2327

XLDnaute Barbatruc
Re : Création automatique de feuille par ligne saisie

Re…
Il faut placer le code dans le module de code de la feuille RECAP, ajuster les références (la feuille Facture devient feuille EX FACTURE, par exemple) et ajouter le transfert de données de la base vers les factures :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Cible As Range, Annuler As Boolean)
Dim l&, i&, odat()
  If Cible.Address = "$A$1" Then
    l = Cells(Rows.Count, 1).End(xlUp).Row
    If l > 3 Then
      odat = Range(Cells(3, 1), Cells(l, 20)).Value
      With Application: .ScreenUpdating = 0: .Calculation = -4135: End With
      For i = 2 To UBound(odat, 1)
        If Not IsEmpty(odat(i, 7)) Then
          On Error Resume Next
          Sheets(CStr(odat(i, 1) & "-" & odat(i, 7))).Activate
          If Err.Number <> 0 Then
            Sheets("EX FACTURE").Copy after:=Sheets(Sheets.Count)
            With ActiveSheet
              .Name = CStr(odat(i, 1) & "-" & odat(i, 7))
              .Range("$D$10").Value = odat(i, 4)
              .Range("$D$11").Value = odat(i, 5)
              .Range("$D$12").Value = odat(i, 6)
              .Range("$B$17").Value = CStr(odat(i, 2)) & " " & CStr(odat(i, 1))
              .Range("$B$18").Value = CStr(odat(i, 3))
              .Range("$A$20").Value = CStr(odat(i, 9))
              .Range("$C$20").Value = odat(i, 10)
              .Range("$A$21").Value = CStr(odat(i, 11))
              .Range("$C$21").Value = odat(i, 12)
              .Range("$C$25").Value = odat(i, 13)
              .Range("$A$26").Value = CStr(odat(i, 14))
              .Range("$B$29").Value = CLng(odat(i, 8))
              .Range("$B$45").Value = CLng(odat(i, 15))
            End With
          End If
        End If
      Next
      On Error GoTo 0
      With Application: .Calculation = -4105: .ScreenUpdating = 1: End With
    End If
    Annuler = True
  End If
End Sub
(Voir le classeur joint.)

À noter : une fois une facture créée, les modifications concernant cette facture dans la feuille RECAP ne modifient évidemment pas la facture. (Normal : une facture ne doit pas être bricolée après sa création.) Si on veut modifier une facture, il faut d'abord la supprimer, puis la recréer. Ou bien en éditer une autre avec un nouveau numéro si on veut garder la trace de l'opération annulée.​
ROGER2327
#5203


Jeudi 12 Clinamen 138 (Saint Georges Dazet, poulpe au regard de soie, SQ)
14 Germinal An CCXIX
2011-W13-7T15:11:44Z
 

Fichiers joints

Dernière édition:

Murielmerle

XLDnaute Nouveau
Re : Création automatique de feuille par ligne saisie

Bonjour ROGER2327,

Merci, j'ai réussi à modifier quelques éléments mais à force de toujours vouloir simplifier les choses, cela se complique pour la réalisation de mon fichier !

J'amerais lorsqu'une entreprise ou un particulier finance la scolarité de plusieurs élèves de la même classe ou non, soit créée une seule facture dans laquelle apparaitra les noms et prénoms des élèves regroupés par classe.

Est-ce que cela est faisable ?

Merci d'avance,

Bonne journée.

Muriel
 

Haut Bas