recherche et modification enregistrement

jean marc1234

XLDnaute Occasionnel
bonjour,
j'ai actuellement un classeur avec plusieurs page qui chacune contienne un tableau avec des entêtes identiques.
Un userform unique me permet d'entrer des enregistrements dans la feuille que je souhaite.
Je recherche un code qui me permettrais par le même userform avec un bouton "rechercher" et par le champ "nom"de retrouver un enregistrement et de pouvoir enregistrer la modification éventuelle.
J'espère que je suis clair dans ma demande.
Voila si quelqu’un pouvais m'aider.
Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Ça vient de ce que la référence à CBxL n'est pas cochée dans le projet VBA ou qu'elle est MANQUANTe parce que vous n'avez pas installé le CBxL.xlam, ou qu'il n'est plus ouvert. S'il a été installé dans le dossier de compléments, pour l'ouvrir il suffit de cocher le complément "ComboBox liées", coté Excel cette fois.
C'est possible alors je le renvoie, encore un peu plus complété. À vous de compléter la procédure GarnirAutresContrôles.
 

Pièces jointes

  • CBxLiéesJean marc1234.xlsm
    131.6 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
S'il n'y est pas c'est que vous n'avez pas installé dans votre dossier de compléments le CBxL.xlam à partir du CBxL.xlsm fourni au poste #3.

Remarquez, si vous n'en aurez jamais d'autre usage, je peux vous installer les modules dans le projet d'application si vous préférez. C'est juste un module standard et deux modules de classe. Ces modules de service sont assez énormes à l'échelle de ce qui se fait habituellement en matière de programmation applicative, mais de loin pas autant que les bibliothèques Microsoft, quand même.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Soit.

Pour l'essentiel vous aurez juste encore besoin d'une procédure de ce genre :
VB:
Private Sub CBnValider_Click()
VLgn(1, 9) = CVDate(Me.TBxDateDeRDV.Text)
etc.
If LCou = 0 Then
   CL.ValeursVers VLgn
   CL.Lignes.Add.Range.Value = VLgn
   CL.Actualiser
Else
   CL.Lignes(LCou).Range.Value = VLgn: End If
End Sub
 

Pièces jointes

  • CBxLiéesJean marc1234.xlsm
    131.6 KB · Affichages: 27
Dernière édition:

Dranreb

XLDnaute Barbatruc
Vous devez compléter la Sub CBnValider, créer un bouton de ce nom, dont on peut d'ailleurs modifier le Caption dans ces deux procédures :
VB:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
LCou = 0
ReDim VLgn(1 To 1, 1 To 12)
CBnValider.Caption = "Ajouter"
GarnirAutresContrôles
End Sub

Private Sub CL_Résultat(Lignes() As Long)
If UBound(Lignes) > 1 Then Exit Sub
LCou = Lignes(1)
VLgn = CL.PlgTablo.Rows(LCou).Value
GarnirAutresContrôles
CBnValider.Caption = "Modifier"
End Sub
Les autre boutons je ne sais pas à quoi ils servaient.

Déjà la synthèse devait être OK puisque l'UserForm s’appuie dessus.
Si elle risque de ne jamais l'être il faudrait un 'Synthèse' au moins avant le CL.Actualiser
et peut être un 'ÉclaterParAgences' dans une Sub UserForm_QueryClose

Mais si vous tenez à en garder le contrôle, vous pouvez aussi mettre des boutons :
VB:
Private Sub CBnSynthèse_Click()
Synthèse
CL.Actualiser
End Sub

Private Sub CBnÉclater_Click()
ÉclaterParAgences
End Sub
 
Dernière édition:

jean marc1234

XLDnaute Occasionnel
Vous devez compléter la Sub CBnValider, créer un bouton de ce nom, dont on peut d'ailleurs modifier le Caption dans ces deux procédures :
VB:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
LCou = 0
ReDim VLgn(1 To 1, 1 To 12)
CBnValider.Caption = "Ajouter"
GarnirAutresContrôles
End Sub

Private Sub CL_Résultat(Lignes() As Long)
If UBound(Lignes) > 1 Then Exit Sub
LCou = Lignes(1)
VLgn = CL.PlgTablo.Rows(LCou).Value
GarnirAutresContrôles
CBnValider.Caption = "Modifier"
End Sub
Les autre boutons je ne sais pas à quoi ils servaient.

Déjà la synthèse devait être OK puisque l'UserForm s’appuie dessus.
Si elle risque de ne jamais l'être il faudrait un 'Synthèse' au moins avant le CL.Actualiser
et peut être un 'ÉclaterParAgences' dans une Sub UserForm_QueryClose

Mais si vous tenez à en garder le contrôle, vous pouvez aussi mettre des boutons :
VB:
Private Sub CBnSynthèse_Click()
Synthèse
CL.Actualiser
End Sub

Private Sub CBnÉclater_Click()
ÉclaterParAgences
End Sub
 

Dranreb

XLDnaute Barbatruc
J'ai sélectionné Agence: "CALVISSON", puis tapé Nom du client: "Toto", bouton "Ajouter", ça m'a bien ajouté une nouvelle dernière ligne dans Synthèse.
Après pour que ça se retrouve bien dans la feuille d'agence "CALVISSON" il faut exécuter ÉclaterParAgences
 

Dranreb

XLDnaute Barbatruc
Zut ! je viens de faire l'essai, ça ne marche pas, il y a un bogue dans ÉclaterParAgences.
Il manque un morceau parce que LOtAg.HeaderRowRange.Offset(1) ne définit qu'une plage d'une seule ligne. Il faut l'étendre au nombre de lignes à garnir en y ajoutant Resize(UBound(Tag)). Ce qui donne :
LOtAg.HeaderRowRange.Offset(1).Resize(UBound(Tag)).Value = Tag
 

Dranreb

XLDnaute Barbatruc
Quel bogue ? Il est vrai que c'est un nom de propriété. Je l'appellerais partout TAgc dans la prochaine version.
Pour rendre active l'instruction il suffit de la 'décommentairiser'. C'est à dire enlever l'apostrophe devant qui la transformait jusqu'ici en commentaire.
 

Discussions similaires

Réponses
33
Affichages
3 K

Statistiques des forums

Discussions
311 712
Messages
2 081 802
Membres
101 819
dernier inscrit
lukumubarth