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):
-> 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 ?
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.
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):
- 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,
- 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.
- 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),
- Le placement de cette nouvelle ligne s'effectue par le tri alphabétique décidé par le 1er champ de l'UserForm ("Service"),
- 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.
-> 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
Dernière édition: