Création d'une base de donnée simple en VBA

Brudyx

XLDnaute Nouveau
Bonjour à tous,


j'espère que vous avez passé de bonnes fêtes

(Je suis plutôt novice en matière de création VBA, mais je sais me débrouiller avec des partitions déjà existante)

Mon besoin : Conserver des informations que je rédige à chaque nouvelle demande, à chaque fois je remet à blanc mon tableau excel de base mais je ne sauvegarde absolument pas mes anciennes infos, et impossible de tenir un suivis à jour

Mon idée : Créer un formulaire unique, et à l'aide d'un bouton, envoyer ma saisie en feuille 2 dans une BDD simple, me garantissant une traçabilité, les informations s'y ajouterais au fur à mesure

Je joint mon fichier, dans l'espoir que ça reste le plus simple possible
J'ai commencé à utiliser la fonction enregistrer une macro, mais ce n'étais pas concluant, malgré plusieurs tentative, impossible d'aller plus loin qu'un copier coller basique :/

En vous remerciant d'avance pour le temps accordé
 

Pièces jointes

  • Cotation Automatisée.xlsm
    23.3 KB · Affichages: 122

cp4

XLDnaute Barbatruc
Bonsoir,

Pas tout compris dans ton fichier. essaie cette macro
VB:
Sub copier_dans_bd()
   Dim dl As Byte, dl1 As Integer
   dl = Sheets("affichage").Range("A" & Rows.Count).End(xlUp).Row
   dl1 = Sheets("bdd").Range("A" & Rows.Count).End(xlUp).Row + 1
   Sheets("affichage").Range("A5:M" & dl).Copy Sheets("bdd").Range("A" & dl1)
   Sheets("affichage").Range("A5:M" & dl).EntireRow.Delete
End Sub
 

Brudyx

XLDnaute Nouveau
Salut CP4,

Merci pour le temps que tu m'a accordé, et très bien accordé, elle est très bien cette macro
J'ai bidouillé un peu, j'ai supprimé ta ligne de Delete pour conserver la feuille comme tel , mais j'ai essayer d'y intégrer un copypaste special, impossible ça fait pas ce que je veux et ça coince

VB:
Sub copier_dans_bd()
   Dim dl As Byte, dl1 As Integer
   dl = Sheets("affichage").Range("A" & Rows.Count).End(xlUp).Row
   dl1 = Sheets("bdd").Range("A" & Rows.Count).End(xlUp).Row + 1
   Sheets("affichage").Range("A5:M" & dl)[B].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False[/B]
        Sheets("bdd").Range ("A" & dl1)

End Sub

Pour le reste, je vais fouiner dans le forum, en ce qui concerne l'enregistrement du fichier, je pense avoir trouver quelque chose
 

cp4

XLDnaute Barbatruc
Bonjour,

Comme ceci
VB:
Sub copier_dans_bd()
   Dim dl As Byte, dl1 As Integer
   dl = Sheets("affichage").Range("A" & Rows.Count).End(xlUp).Row
   dl1 = Sheets("bdd").Range("A" & Rows.Count).End(xlUp).Row + 1
   Sheets("affichage").Range("A5:M" & dl).Copy
   Sheets("bdd").Range("A" & dl1).PasteSpecial Paste:=xlPasteValues
   Application.CutCopyMode = False
End Sub
 

Brudyx

XLDnaute Nouveau
CP4 merci ! Je note,

J'ai par la suite essayer de greffer une macro qui me permettais d'enregistrer une copie de la feuille au format pdf, mais je vais le modifier pour du excel.. le soucis c'est qu'elle ne marche plus, le nom du fichier ne prend plus sur Texte, et surtout, il semble y avoir un soucis dans l'ordre de la macro, le fichier est ouvert et bug sans pouvoir s'enregistrer, mais je vois pas pourquoi

VB:
Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Affichage").Select
    Sheets("Affichage").Copy
 
     Chemin = "\\na-data\PROFILRDS\YABR\Desktop\Cotations\"
    texte = Range("Fournisseur") & " - " & Range("Client") & " - " & Range("Date")
' La définition du chemin et du nom de mon fichier
    Application.DisplayAlerts = False
 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & texte, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
'la partie Buguée, d'ailleurs il faut que je change pour que ça s'enregistre en fichier Excel
    ActiveWindow.Close

End Sub

Edit : 14h28 : c'est le troisième critère de nom de fichier qui fait buguer la macro... est ce que quelqu'un sait comment le rajouter sas que ça fasse buguer la macro ?
 

cp4

XLDnaute Barbatruc
CP4 merci ! Je note,

J'ai par la suite essayer de greffer une macro qui me permettais d'enregistrer une copie de la feuille au format pdf, mais je vais le modifier pour du excel.. le soucis c'est qu'elle ne marche plus, le nom du fichier ne prend plus sur Texte, et surtout, il semble y avoir un soucis dans l'ordre de la macro, le fichier est ouvert et bug sans pouvoir s'enregistrer, mais je vois pas pourquoi

VB:
Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Affichage").Select
    Sheets("Affichage").Copy

     Chemin = "\\na-data\PROFILRDS\YABR\Desktop\Cotations\"
    texte = Range("Fournisseur") & " - " & Range("Client") & " - " & Range("Date")
' La définition du chemin et du nom de mon fichier
    Application.DisplayAlerts = False

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & texte, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
'la partie Buguée, d'ailleurs il faut que je change pour que ça s'enregistre en fichier Excel
    ActiveWindow.Close

End Sub

Edit : 14h28 : c'est le troisième critère de nom de fichier qui fait buguer la macro... est ce que quelqu'un sait comment le rajouter sas que ça fasse buguer la macro ?
Oui, c'est la date qui fait plantée le code.
Une date contient des slashs (/), or certains caractères spéciaux ne sont pas autorisés dans le nom des fichiers.
Il faut remplacer ces derniers par un underscore (tiret du 8) ou tiret.

Pourquoi as-tu mis Sheets("Affichage").Select suivi de Sheets("Affichage").Copy?

A+
 

cp4

XLDnaute Barbatruc
un essai en pdf à partir de ta macro
VB:
Sub Feuille_En_PDF()
'
Dim LaDate As String

    Sheets("Affichage").Activate

     Chemin = "\\na-data\PROFILRDS\YABR\Desktop\Cotations\" 'je suppose que ce chemin est en réseau
     LaDate = Format(Range("Date"), "yyyy.mm.dd")
    texte = Range("Fournisseur") & " - " & Range("Client") & " - " & LaDate
' La définition du chemin et du nom de mon fichier
    Application.DisplayAlerts = False

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & texte, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
'    ActiveWindow.Close
MsgBox "Edition PDF terminée!"
End Sub
ou bien avec la date du jour en te donnant la main pour le choix du dossier
VB:
Sub PDF()
    Dim LeNom As String, LaDate As String, LeRep
    LeNom = Range("D2").Value & " - " & Range("G2")
    LaDate = Format(Date, "dd.mm.yyyy")
    LeNom = LeNom & " - " & LaDate & ".pdf"
    LeRep = Application.GetSaveAsFilename(LeNom, "PDF Files (*.pdf), *.pdf")
      If VarType(LeRep) = vbString Then
        ActiveSheet.ExportAsFixedFormat xlTypePDF, LeRep
        MsgBox "Le fichier pdf a bien été créé!"
    End If
End Sub
 
Dernière édition:

Brudyx

XLDnaute Nouveau
Bonjour Cp4, merci beaucoup pour ton temps !

J'ai ajouté select et copy suite à une macro enregistré à la mano.. pas encore appris à comprendre et écrire les lignes proprement de mon propre chef :'( Shame on me.

Je regarde tout ça quand je me trouve un peu de temps, j'avais ajouté des particularités... et j'ai omis de sauvegarder. (Notamment des colonnes cachées entre l'excel et le Pdf)
 

Brudyx

XLDnaute Nouveau
Rebonjour à tous,

Très bonne année, et qu'excel soit encore un monde merveilleux de partage et de découverte !

J'ai réussis à faire tout ce que je voulais à peu près pour ma BDD, simple point noir encore :

j'aimerais que lors de l'extraction en Pdf, des colonnes ce cache, du coup... j'ai essayé à la mano, mais ça ne marche pas

VB:
 Dim LeNom As String, LaDate As String, LeRep
    Columns("H:H").Select
    Selection.EntireColumn.Hidden = True
    Columns("J:K").Select
    Selection.EntireColumn.Hidden = True
    Columns("M:M").Select
    Selection.EntireColumn.Hidden = True
    Columns("A:B").Select
    Range("B1").Activate
    Selection.EntireColumn.Hidden = True
    Columns("A:O").Select
    Selection.EntireColumn.Hidden = False
    LeNom = Range("D2").Value & " - " & Range("G2")
    LaDate = Format(Date, "dd.mm.yyyy")
    LeNom = LeNom & " - " & LaDate & ".pdf"
    LeRep = Application.GetSaveAsFilename(LeNom, "PDF Files (*.pdf), *.pdf")
      If VarType(LeRep) = vbString Then
        ActiveSheet.ExportAsFixedFormat xlTypePDF, LeRep
        MsgBox "Le fichier pdf a bien été créé!"
    End If
 

cp4

XLDnaute Barbatruc
Bonjour, Meilleurs vœux pour cette année 2019:)

Je pense bien que tu as fait n'importe quoi. Columns("A:O") représente la plage à éditer mais le problème c'est que tu l'as masqué, du coup ça ne fonctionne pas. Cette macro à adapter
VB:
Sub PDF()
   Dim LeNom As String, LaDate As String, LeRep
   With ActiveSheet
      .Range("A:B,H:H,J:K,M:M,G:G").EntireColumn.Hidden = True

      LeNom = .Range("D2").Value & " - " & .Range("G2")
      LaDate = Format(Date, "dd.mm.yyyy")
      LeNom = LeNom & " - " & LaDate & ".pdf"
      LeRep = Application.GetSaveAsFilename(LeNom, "PDF Files (*.pdf), *.pdf")
      If VarType(LeRep) = vbString Then
         .ExportAsFixedFormat xlTypePDF, LeRep
         MsgBox "Le fichier a bien été créé"
      End If
      .Range("A:B,H:H,J:K,M:M,G:G").EntireColumn.Hidden = False

   End With
End Sub
Bon courage;)
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 099
Membres
112 661
dernier inscrit
ceucri