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?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
Réponses
4
Affichages
1 K
  • Question Question
Microsoft 365 ListBox TextBox
Réponses
5
Affichages
2 K
Réponses
1
Affichages
2 K
Réponses
22
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…