XL 2010 vba userform copies des données

jokerfidelio

XLDnaute Occasionnel
Bonjour a tous,

Concernant ce bout de code, une anomalie se produit a la copie des données sur les feuilles.
au lieu d’être copié comme indiqué sur le code sur l'onglet "BD" les données sont copiés sur l'onglet qui est actif !
Pouvez vous m'aider ?

VB:
Private Sub CommandButton1_Click()

Dim L As Integer

 If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     Range("A" & L).Value = TextBox_date
     Range("B" & L).Value = TextBox_nom
     Range("C" & L).Value = TextBox_prenom
     Range("D" & L).Value = TextBox_infolog
     Range("E" & L).Value = ComboBox_chef
     Range("G" & L).Value = ComboBox_certification
     Range("H" & L).Value = ComboBox_montage
     Range("J" & L).Value = TextBox_observation
      End If

End Sub
D’avance merci a vous
 

Santulud

XLDnaute Occasionnel
Bonjour,

c'est normal, tu n'indique pas sur quelle feuille les données doivent être copiées, donc par défaut, sur l'onglet actif.
Ta variable "L" n'est pas rattaché à la feuille "BD", elle va juste compter dessus.

essaye avec ça :
VB:
Private Sub CommandButton1_Click()

Dim L As Integer
Dim ws as Worksheets

ws=worksheets("BD")

 If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     ws.Range("A" & L).Value = TextBox_date
     ws.Range("B" & L).Value = TextBox_nom
     ws.Range("C" & L).Value = TextBox_prenom
     ws.Range("D" & L).Value = TextBox_infolog
     ws.Range("E" & L).Value = ComboBox_chef
     ws.Range("G" & L).Value = ComboBox_certification
     ws.Range("H" & L).Value = ComboBox_montage
     ws.Range("J" & L).Value = TextBox_observation
      End If

End Sub
 

jokerfidelio

XLDnaute Occasionnel
Bonjour,

c'est normal, tu n'indique pas sur quelle feuille les données doivent être copiées, donc par défaut, sur l'onglet actif.
Ta variable "L" n'est pas rattaché à la feuille "BD", elle va juste compter dessus.

essaye avec ça :
VB:
Private Sub CommandButton1_Click()

Dim L As Integer
Dim ws as Worksheets

ws=worksheets("BD")

If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     ws.Range("A" & L).Value = TextBox_date
     ws.Range("B" & L).Value = TextBox_nom
     ws.Range("C" & L).Value = TextBox_prenom
     ws.Range("D" & L).Value = TextBox_infolog
     ws.Range("E" & L).Value = ComboBox_chef
     ws.Range("G" & L).Value = ComboBox_certification
     ws.Range("H" & L).Value = ComboBox_montage
     ws.Range("J" & L).Value = TextBox_observation
      End If

End Sub
merci d’avoir repondu
erreur de compilation
utilisation incorrecte de la propriété
 

Santulud

XLDnaute Occasionnel
autant pour moi, je suis allez un peu trop vite en besogne

VB:
Private Sub CommandButton1_Click()

Dim L As Integer
Dim ws as Worksheet

set ws=sheets("BD")

If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     ws.Range("A" & L).Value = TextBox_date
     ws.Range("B" & L).Value = TextBox_nom
     ws.Range("C" & L).Value = TextBox_prenom
     ws.Range("D" & L).Value = TextBox_infolog
     ws.Range("E" & L).Value = ComboBox_chef
     ws.Range("G" & L).Value = ComboBox_certification
     ws.Range("H" & L).Value = ComboBox_montage
     ws.Range("J" & L).Value = TextBox_observation
      End If

End Sub
 

jokerfidelio

XLDnaute Occasionnel
autant pour moi, je suis allez un peu trop vite en besogne

VB:
Private Sub CommandButton1_Click()

Dim L As Integer
Dim ws as Worksheet

set ws=sheets("BD")

If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     ws.Range("A" & L).Value = TextBox_date
     ws.Range("B" & L).Value = TextBox_nom
     ws.Range("C" & L).Value = TextBox_prenom
     ws.Range("D" & L).Value = TextBox_infolog
     ws.Range("E" & L).Value = ComboBox_chef
     ws.Range("G" & L).Value = ComboBox_certification
     ws.Range("H" & L).Value = ComboBox_montage
     ws.Range("J" & L).Value = TextBox_observation
      End If

End Sub
Merci beaucoup excellent cela fonctionne

Une autre question en relation avec ce code je n'arrive pas a adapter la date du jour sur les texbox j'ai cela mais je n'arrive pas a l'adapter !
textbox1.value=format(now,"dd,mm,yyyy")

exemple a modifier

ws.Range("A" & L).Value = TextBox_date


merci d'avance
 

jokerfidelio

XLDnaute Occasionnel
par contre apres plusieurs essai j'ai aussi sur mon userform un deuxieme bouton qui copie les donnees sur un autre onglet du coup
erreur execution 13 de incomptabilite

VB:
Private Sub CommandButton4_Click()

Dim L As Integer
Dim ws As Worksheets

Set ws = Sheets("BD_COMBIS")

 If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("BD_COMBIS").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     Range("A" & L).Value = TextBox_datecombi
     Range("E" & L).Value = TextBox_combi
     Range("D" & L).Value = TextBox_codeinfolog
       End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne pouvez pas affecter un objet à une collection. (je parle du type Worksheets dans la déclaration de ws)
Vous auriez intérêt à mettre vos plages sous forme de tableau et à utiliser mon complément CBxLCtlA.xlam: il s'occupe correctement de beaucoup de choses dont vous n'aurez plus à programmer les détails. Presque tout se définira dans la UserForm_Initialize. Je joindrai son précurseur à installer si ça vous intéresse.
Quels sont les liens entres la feuille BD et la feuille BD_COMBIS ?
 

jokerfidelio

XLDnaute Occasionnel
Bonjour.
Vous ne pouvez pas affecter un objet à une collection. (je parle du type Worksheets dans la déclaration de ws)
Vous auriez intérêt à mettre vos plages sous forme de tableau et à utiliser mon complément CBxLCtlA.xlam: il s'occupe correctement de beaucoup de choses dont vous n'aurez plus à programmer les détails. Presque tout se définira dans la UserForm_Initialize. Je joindrai son précurseur à installer si ça vous intéresse.
Quels sont les liens entres la feuille BD et la feuille BD_COMBIS ?
apres reflexion aucune les deux peuvent être géré sur la mème feuille BD
j'ai pas réellement tout compris mais merci de votre aide
 

Dranreb

XLDnaute Barbatruc
Par ailleurs j'ai l'impression que vous allez revoir l'UserForm suite au constat que tout peut se gérer dans la même feuille. Alors je joins aussi mon générateur d'UserForm.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
La programmation du UserForm est à peu près toujours la même, seuls les détail dans la UserForm_Initialize sont à adapter :
VB:
Option Explicit
Private WithEvents CL As ComboBoxLiées, CA As ControlsAssociés, LCou As Long, TVL()
Private Sub UserForm_Initialize()
   Set CL = Création.ComboBoxLiées: CL.Plage WshBD
   Set CA = Création.ControlsAssociés: Set CA.Colonnes = CL.Colonnes
' Mettez ici une série d'instructions de la forme :
'   C?.Add Control, Colonne
' Avec:
'     C?: CA ou CL. CL doit être pris seulement pour une ComboBox dont la liste doit être
'        constituée dynamiquement en fonction de ce qui existe dans la base et de ce que
'        l'utilisateur aura déjà mis dans d'autres, semblables.
'     Control: le nom d'un contrôle. Mettre Me. devant peut vous aider à le retrouver.
'     Colonne: Le numéro d'ordre de la colonne est accepté, mais si vous avez fait subir à votre
'       plage une mise sous forme de tableau, vous pouvez spécifier le titre de la colonne.
   CL.CouleurSympa
   CL.Actualiser
   End Sub
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn = 0 And Complet Then
      CBnValider.Enabled = True: CBnValider.Caption = "Ajouter": CBnSuppr.Enabled = False
   ElseIf NbrLgn = 1 Then
      CBnValider.Enabled = True: CBnValider.Caption = "Modifier": CBnSuppr.Enabled = True
   Else
      CBnValider.Enabled = False: CBnValider.Caption = "…": CBnSuppr.Enabled = False
      End If
   LCou = 0
   ReDim TVL(1 To 1, 1 To CL.Colonnes.Count)
   CA.ValeursDepuis TVL
   End Sub
Private Sub CL_BingoUn(ByVal Ligne As Long)
   LCou = Ligne
   TVL = CL.Lignes(LCou).Range.Value
   CA.ValeursDepuis TVL
   End Sub
Private Sub CBnEchap_Click(): If CL.ChangéÀLEchap Then Exit Sub
   CL.Nettoyer
   End Sub
Private Sub CBnValider_Click()
   CA.ValeursVers TVL
   If LCou = 0 Then
      CL.ValeursVers TVL
      CL.Lignes.Add.Range.Value = TVL
      CL.Actualiser
   Else
      CL.Lignes(LCou).Range.Value = TVL
      End If
   End Sub
Private Sub CBnSuppr_Click()
   If LCou = 0 Then Exit Sub
   If MsgBox("Êtes-vous sûr de vouloir supprimer cet élément ?", vbExclamation + vbYesNo _
      + vbDefaultButton2, Me.Caption & "— Supprimer") = vbNo Then Exit Sub
   CL.Lignes(LCou).Delete
   CL.Actualiser
   End Sub
Attention les propriétés Lignes et Colonnes ne sont applicable que si un ListObject a été détecté, c'est à dire si la plage à mettre à jour a fait l'objet d'une mise sous forme de tableau régi par Excel, à références structurées. À défaut la propriété Range CL.PlgTablo peut être utilisée, mais est moins pratique d'emploi.
 
Dernière édition:

jokerfidelio

XLDnaute Occasionnel
Par ailleurs j'ai l'impression que vous allez revoir l'UserForm suite au constat que tout peut se gérer dans la même feuille. Alors je joins aussi mon générateur d'UserForm.
Bonsoir, je test les fichiers depuis 1H et je m'arrache les cheveux, tres loin de mes connaissances (hélas) j arrive a creer un userform avec le generateur pas de souci ensuite pour gerer le code bah.... rien a faire je nage.... et le fichier CBxLCtlA j'essaye de comprendre la marche a suivre mais je nage completement....

Vraiment desolé pas a la hauteur de votre travail....
 

jokerfidelio

XLDnaute Occasionnel
bon j'arrive a lancer mon userform en changeant ceci
Private Sub UserForm_Initialize() par le nom de mon userform Private Sub UserForm1_Initialize()
 

Dranreb

XLDnaute Barbatruc
Si vous y avez déjà collé le code du poste #17, joignez le classeur, que je puisse vous dire ce qui manque.
N'oubliez pas de cocher la référence CLsCAs (Alt+OR sous VBE). Si le projet n'est plus ouvert, alors, d'abord, coté Excel cette fois :
1572878634732.png
bon j'arrive a lancer mon userform en changeant ceci
Private Sub UserForm_Initialize() par le nom de mon userform Private Sub UserForm1_Initialize()
Pas bon, ça. Devient une procédure ordinaire qui n'est jamais exécutée puisque jamais invoquée. Le noyau générateur d'évènements MSForms s'appelle toujours UserForm dans tous les UserForm quels que soient leurs noms.
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas