Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Conseil Projet : TCD ? VBA ? PowerQuery?

pin_electronic

XLDnaute Nouveau
Bonjour à toutes et tous XLDnautes,

J'ai été aidé à la construction d'un projet sur plusieurs onglets, qui pour moi n'est pas satisfaisant. Je ne connais pas très bien le VBA et j'ai du mal à "automatiser" des commandes.

Conditions du projet (Exemple en fichier joint):
  1. Un tableau "BDD", sur le 1er onglet directeur "Data", créé des données qui seront utilisées sur les 4 onglets simultanément : ceci à partir d'un UserForm,
  2. Par l'utilisation du bouton UserForm : Création d'une ligne "x" (6 champs à remplir, 6 premières colonnes), Le reste de la ligne (les autres colonnes) se remplit manuellement.
  3. Ces infos sont distribuées sur tous les onglets, à un emplacement identique (numéro de ligne) de manière imbriqué (Incrémentation de cette ligne entre des lignes de données déjà existantes),
  4. Le placement de cette nouvelle ligne s'effectue par le tri alphabétique décidé par le 1er champ de l'UserForm ("Service"),
  5. Les valeurs précédentes contenues dans cette ligne seront déplacés et recopiés d'une ligne vers le bas, ainsi que toutes les lignes du dessous.
Question 1 : Pourquoi dans mon tableau cette recopie ne se fait pas entièrement sur toute la ligne ?
-> Pour info : seulement les 6 premières colonnes.
-> en fait dans ce code : à quel endroit trouve t'on l'indication de : 1/placement dans une ligne précise et 2/placement sur les 6 premières colonnes ?

VB:
Private Sub CommandButton1_Click()
Dim I%, LR%
Application.EnableEvents = False
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row + 1
For I = 6 To 7
    If Not IsDate(Me.Controls("TextBox" & I)) Then
        MsgBox "Merci de renseigner une date valide", vbCritical
        Exit Sub
    End If
Next I
For I = 2 To 5
    ActiveSheet.Cells(LR, I) = Me.Controls("TextBox" & I)
Next
ActiveSheet.Cells(LR, 6) = CDate(Me.Controls("TextBox6"))
ActiveSheet.Cells(LR, 7) = CDate(Me.Controls("TextBox7"))
With ActiveSheet.ListObjects("BDD").Sort
    .SortFields.Add Key:=ActiveSheet.ListObjects("BDD").ListColumns(1).DataBodyRange, Order:=xlAscending
    .Apply
    .SortFields.Clear
End With
ThisWorkbook.RefreshAll
Worksheets("Data").Activate
Unload Me
MsgBox "Nouvelle ligne ajoutée", vbInformation
Application.EnableEvents = True
End Sub

Question 2 : Serait-il meilleur de programmer tout ça sous forme de TCD, de codage Visual Basic, ou au travers de PowerQuery ? ou un mix de tout...

Merci pour vos précieux conseils, aide à la réflexion.
 

Pièces jointes

  • projetvba-v4-pq.xlsm
    389.5 KB · Affichages: 21
Dernière édition:

Discussions similaires

Réponses
7
Affichages
641
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…