Moteur de recherche + Fonction modifier VBA-USERFORM

Smaily

XLDnaute Junior
Bonjour,

Je souhaite créer une sorte de moteur de recherche en VBA, cela dit je bloque un peu.
Le but de cette macro est de rechercher une ligne de la feuille "Répertoire" comportant la donnée recherchée. (une sorte de filtre)

Merci d'avance pour le coup de main.
Cordialement.
 

Pièces jointes

  • METZ.xlsm
    48.4 KB · Affichages: 35

Smaily

XLDnaute Junior
Bonjour,
Après un certain temps d'utilisation de l'outil, je me demandais si c'était possible de créer un historique des saisies dans le formulaire.
Créer une sorte d'écriture comptable permettant d'avoir un historique des actions.
Est-ce possible ?
Merci d'avance,
Bonne journée.
 

Dranreb

XLDnaute Barbatruc
Boujour
Vous pouvez toujours prévoir une colonne X pour la date et l'heure de dernière modidification, où vous mettrez TVL(1, X) = Now avant d'en garnir un élément nouveau ou existant de CL.Lignes
Après vous pourrez classer le tableau sur cette colonne.
 

Smaily

XLDnaute Junior
D'accord je vois. Cependant j'aimerai avoir accès à toutes les modifications que les opérateurs ont pu effectuer sur le document car si une personne supprime la mauvaise référence, il n'y a pas de retour en arrière...
Est ce possible de créer une troisième feuille "Ecriture comptable" ?
 

Smaily

XLDnaute Junior
Bien reçu.
Quelque chose comme ça ?


Private Sub LOtEC()
TVLEC(1, 9) = TVL(1, 7)
If LCou = 0 Then
CL.ValeursVers TVLEC
CL.Lignes.Add.Range.Value = TVLEC
CL.Actualiser
Else
CL.Lignes(LCou).Range.Value = TVLEC
End If
LOtEC.ListRows.Add.Range.Value = TVLEC

End Sub

Dans "UFmMàJ"
 

Dranreb

XLDnaute Barbatruc
Peut être pas besoin de refaire la ventilation des contrôles
Faite une procédure qui écrit juste une copie du TVL avec un code et l'heure :
VB:
Private Sub CopieTVLEC(ByVal Code As String)
   Dim TCopie()
   TCopie = TVL
   ReDim Preserve TCopie(1 To 1, 1 To 9)
   TCopie(1, 8) = Code
   TCopie(1, 9) = Now
   LOtEC.ListRows.Add.Range.Value = TCopie
   End Sub
Et appelez cette procédure chaque fois que vous voulez que ce soit fait avec comme Code "Ajout", "Modif", "Suppr", voire "Ancien" d'abord, avant le CA.ValeursVers TVL (seulement si LCou > 0) si vous voulez aussi garder les valeurs de la ligne avant la modification.
 

Smaily

XLDnaute Junior
d'accord du coup il suffit de mettre ça ici c'est ça ? :

test.png
 

Dranreb

XLDnaute Barbatruc
Non. Ça nous donnerait donc :
Une déclaration dans la Private du début :
VB:
Private WithEvents CL As ComboBoxLiées, WithEvents CA As ControlsAssociés, LCou As Long, TVL(), LOtEC As ListObject
À la fin de la UserForm_Initialize :
Code:
   Set LOtEC = Feuil2.ListObjects(1)
   End Sub
Et toute la fin du du module remaniée comme ça :
VB:
Private Sub CBnValider_Click()
   If LCou = 0 Then
      CA.ValeursVers TVL
      CL.ValeursVers TVL
      TVL(1, 7) = "=TODAY()-[@Date]"
      CL.Lignes.Add.Range.Value = TVL
      CopieTVLEC "Ajout"
      CL.Actualiser
   Else
      CopieTVLEC "Ancien"
      CA.ValeursVers TVL
      TVL(1, 7) = "=TODAY()-[@Date]"
      CL.Lignes(LCou).Range.Value = TVL
      CopieTVLEC "Modif"
      End If
   End Sub
Private Sub CBnSuppr_Click()
   If LCou = 0 Then Exit Sub
   CopieTVLEC "Suppr"
   CL.Lignes(LCou).Delete
   CL.Actualiser
   End Sub
Private Sub CopieTVLEC(ByVal Code As String)
   Dim TCopie()
   TCopie = TVL
   ReDim Preserve TCopie(1 To 1, 1 To 9)
   TCopie(1, 8) = Code
   TCopie(1, 9) = Now
   LOtEC.ListRows.Add.Range.Value = TCopie
   End Sub
 

Dranreb

XLDnaute Barbatruc
Dans la version que j'ai gardée, le tableau des écritures comptables doit aller jusqu'à 10 colonnes, non 9.
Alors c'est :
VB:
Private Sub CopieTVLEC(ByVal Code As String)
   Dim TCopie()
   TCopie = TVL
   ReDim Preserve TCopie(1 To 1, 1 To 10)
   TCopie(1, 9) = Code
   TCopie(1, 10) = Now
   LOtEC.ListRows.Add.Range.Value = TCopie
   End Sub
Pourquoi aves vous appelé la feuille représentée par l'objet Feuil2 par quelque chose commençant par "ListObj" ? Je l'aurais appelée "Écritures comptables". Êtes vous sur qu'elle content un tableau Excel de 10 colonnes ? Sinon Feuil2.ListObjects(1) donnerait aussi lieu à cette erreur.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Remarque: Le débogage ne montre pas l'instruction avec "Arrêt sur les erreurs non gérées" coché. Il faut cocher "Arrêt dans le module de classe", parce qu'un UserForm en est un en fait.
(menu Outils, sous menu Options…, onglet Général, rubrique Récupération d'erreur)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi