Créer des onglets factures à partir d'une base

DIMAD

XLDnaute Nouveau
Bonjour à tous,
je commence sur excel et j'ai besoin d'aide de "pro" qui maitrise l'outil.
j'ai une base de données, et je voulais savoir s'il était possible de générer des factures à partir de la base.
j'ai fait un fichier qui résume ce que j'aimerai.

Si quelqu'un peut m'aider

merci

Dimitri
 

Pièces jointes

  • facture.xlsx
    43 KB · Affichages: 71

Staple1600

XLDnaute Barbatruc
Bonjour à tous


A vue de nez, je dirai que cela fleure bon le publipostage avec Word +Excel
1) tu crées un document Word qui fera office de modèle de facture
2) tu insères des champs de fusion dans ce document (en relation avec ta base Excel)

Voir les nombreux tutoriels sur le net (accessibles avec le moteur de recherche de ton choix)
Voici un exemple de tutoriel pris au hasard
http://questionbureautique.over-blo...avec-une-base-de-donnees-excel-121154459.html

Et pour tes recherches, utilises ces mots-clés: publipostage excel factures

Tu devrais avoir de quoi faire durant ce week-end pour lundi pouvoir éditer tes factures automatiquement ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour DIMAD et bienvenue sur XLD :),

Pour le fun, un essai par formules dans le fichier joint sans création d'onglet. Tout se passe dans la feuille Modele. Pour l'utilisation:
  • se placer sur la feuille Modele
  • se placer dans la cellule F14 pour sélectionner le client
  • se placer dans la cellule F15 pour sélectionner la commande du client
Les lignes 1 à 13 et les colonnes A à C de la feuille Modele sont masquées et contiennent des calculs auxiliaires.

nota: sans modifier les formules, on est limité à 203 commandes (colonne GZ de la feuille base). 99 lignes max par commande.

EDIT : Préférez le fichier v1a qui a l'avantage d'afficher immédiatement les éléments des listes de validation en F14 et F15 sans avoir à faire glisser l'ascenseur vers le haut. Ce lien n'existe plus
 

Pièces jointes

  • DIMAD- facture.xlsx- v1.xlsx
    30.1 KB · Affichages: 65
Dernière édition:

Hieu

XLDnaute Impliqué
Salut,

Une solution à adapter selon besoin :
VB:
Sub mljk()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each sh In Sheets
If sh.Name <> "base" And sh.Name <> "Adresse" And sh.Name <> "test" Then sh.Delete
Next sh

For j = 1 To 4
k = 0
nom = Sheets("base").Range("e1").Offset(0, j)
commande = Sheets("base").Range("e2").Offset(0, j)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = nom
    With Sheets(nom)
        .Range("a3") = "Nom"
        .Range("b3") = nom
        .Range("a4") = "N°Commande"
        .Range("b4") = commande
        .Range("a5") = "Adresse"
        .Range("b5") = adresse(nom)
        .Range("a7") = "Qté"
        .Range("b7") = "designation"
        .Range("c7") = "couleur"
        .Range("d7") = "prix"
        .Range("e7") = "Total"
    For i = 4 To 15
    If Sheets("base").Cells(i, j + 5) <> 0 Then
        .Range("a8").Offset(k, 0) = Sheets("base").Cells(i, j + 5)
        .Range("b8").Offset(k, 0) = Sheets("base").Range("a" & i)
        .Range("c8").Offset(k, 0) = Sheets("base").Range("b" & i)
        .Range("d8").Offset(k, 0) = Sheets("base").Range("c" & i)
        .Range("e8").Offset(k, 0).Formula = "=a" & 8 + k & "*d" & 8 + k
        k = k + 1
    End If
    Next i
        .Range("d8").Offset(k, 0) = "TOTAL"
        .Range("e8").Offset(k, 0).Formula = "=sum(e8:e" & 7 + k & ")"
    End With
Next j
End Sub

Function adresse(nom)
Set WF = WorksheetFunction
adresse = WF.Index(Sheets("Adresse").Range("b3:b6"), _
            WF.Match(nom, Sheets("Adresse").Range("a3:a6"), 0))
End Function

++

note : mapomme, t'es trop rapide pour moi ^^
 

Pièces jointes

  • facture_v0.xlsm
    23.8 KB · Affichages: 65

Staple1600

XLDnaute Barbatruc
Bonjour mapomme, Hieu

Hieu (à lire en sachant qu'il s'agit d'humour)
[le petit pinaillage du samedi matin]
Le fun n’empêche pas d'être vigilant sur l'orthographe dans votre code VBA ;)
[/le petit pinaillage du samedi matin]
Sinon si on doit parler VBA et oublier le publipostage (pourtant une solution simple et riche d'options...)
J'aurai usé et abusé d'arrays si je devais verser dans le fun du VBA un samedi matin de fin juillet.
Exemple
Code:
With ActiveSheet(nom)
.Range("A3:A7") = Application.Transpose(Array("Nom", "N°Commande", "Adresse", vbNullString, "Qté"))

mapomme.
Qu'est-ce que tu as contre le publipostage?
Et que penses-tu de cette philosophie : K.I.S.S
(à ne pas confondre avec le groupe de glam rock des seventies)
 
Dernière édition:

DIMAD

XLDnaute Nouveau
Merci à vous tous pour votre réactivité un samedi matin de fin de juillet,
je vais essayer de travailler sur le code de la macro pour adapter le code de Hieu au le fichier plus complexe sur lequel je dois travailler.
je regarde.
Puis je vous demander de l'aide si j'en ai besoin?
++
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re Staple1600,

mapomme.
Qu'est-ce que tu as contre le publipostage?
Et que penses-tu de cette philosophie : K.I.S.S
(à ne pas confondre avec le groupe de glam rock des seventies)

Je n'ai rien contre le publipostage (j'en use de temps à autre). Quand au K.I.S.S. c'est à l'opposé de ma nature profonde. J'ai tendance à être : P.F.S.Q.O.P.F.C. Mais je me soigne (lentement).

Présentement pour le cas qui nous intéresse, je me doutais bien que le fichier joint ne reflétait pas la réalité. Je pense que tu as raison. Le publipostage est sans doute la solution la plus souple.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 204
Messages
2 107 183
Membres
109 769
dernier inscrit
patbol