Comment enregistrer de USERFORM à une feuil Excel

sniper2002

XLDnaute Occasionnel
Bonjour

j'ai construis un userform, l'utilisateur doit remplir les champs du formulaires,
le boutton "enregistrer" sert à enregistrer dans la dernière ligne vide de l'onglet "changement de PA"
donc à travers votre forum j'ai bien chercher dans les topics qui correspond à mon besoin afin d'essayer d'élaborer une macro mais ça marche pas, j'ai beau chercher la cause : (je tiens à préciser que je suis débutant dans ce domaine! je ne connais pas beaucoup, je prefère tenter quelque chose au lieu de demander une solution clé en main).

le code que j'ai compilé est le suivant :


Sub enregistrerBA()
Dim cbpa As Worksheet
Dim S As Control
Dim T As String
Dim ligne As Long


'Definir la feuil changement de PA'
Set cbpa = Worksheets("Changement de PA")

'revoie la 1ère non vide dans la colonne A'
ligne = cbpa.Range("A65536").End(xlUp).Row + 1

'Boucle sur les contrôles du Userform pour s'assurer qu'il ne sont pas vides'
For Each S In BPA.Controls
Select Case True
Case TypeOf S Is MSForms.TextBox, TypeOf S Is MSForms.ComboBox
If S.Value = "" Then
MsgBox "Vous devez remplir tous les champs pour pouvoir enregistrer la baisse de prix !", _
vbExclamation, "Champ resté vide"
Exit Sub
End If
Case Else
End Select
Next S

'Quand tous contrôles sont remplis
RowCount = Worksheets("copie").Range("A2").CurrentRegion.Rows.Count
With Worksheets("copie").Range("A2")
.Offset(RowCount, 0).Value = Me.combox1.Value
.Offset(RowCount, 1).Value = Me.TextBox1.Value
.Offset(RowCount, 2).Value = Me.TextBox3.Value
.Offset(RowCount, 3).Value = Me.combox2.Value
.Offset(RowCount, 4).Value = Me.TextBox4.Value
.Offset(RowCount, 5).Value = Me.TextBox5.Value
.Offset(RowCount, 6).Value = Me.TextBox6.Value
End With
End Sub

encore une fois merci pour votre aide

en vous souhaitant un joyeux noêl :)
 

Pièces jointes

  • Copie.zip
    16.8 KB · Affichages: 141
  • Copie.zip
    16.8 KB · Affichages: 143
  • Copie.zip
    16.8 KB · Affichages: 145

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Comment enregistrer de USERFORM à une feuil Excel

Bonjour sniper,

RowCount = Worksheets("copie").Range("A2").CurrentRegion.Rows .Count
With Worksheets("copie").Range("A2")
.Offset(RowCount, 0).Value = Me.combox1.Value
.Offset(RowCount, 1).Value = Me.TextBox1.Value
.Offset(RowCount, 2).Value = Me.TextBox3.Value
.Offset(RowCount, 3).Value = Me.combox2.Value
.Offset(RowCount, 4).Value = Me.TextBox4.Value
.Offset(RowCount, 5).Value = Me.TextBox5.Value
.Offset(RowCount, 6).Value = Me.TextBox6.Value

voir erreurs ( en rouge)
- il n'y a pas de feuille nommée "copie" dans le classeur ---> à remplacer par "Changement de PA"
- il n'y a pas de combox mais plutôt des combobox

et je ne suis pas sûr du bon fonctionnement de ton test qui vérifie le remplissage de toutes les cases de l'Usf

essaie et dis nous

à+
Philippe
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Comment enregistrer de USERFORM à une feuil Excel

Bonjour Sniper, bonjour le forum,

Sans avoir vraiment pris le temps de regarder ton code, une première remarque: Soit tu écris le code directement dans l'événement Click du CommandButton6 et tu peux alors utiliser le Me.
Soit, comme c'est le cas, tu passes par une procédure externe à l'Userform, et il te faut alors remplcer Me par BPA (qui est le nom de l'UserForm) dans le code...

Édition :

Bonjour Philippe on s'est croisé... Et en plus j'avais même pas remarqué ces autres anomalies...
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Comment enregistrer de USERFORM à une feuil Excel

Re, Bonjour Robert,
Bonjour Sniper, bonjour le forum,


Bonjour Philippe on s'st croisés... Et en plus j'avais même pas remarqué ces autres anomalies...

et je viens d'en remarquer une autre:
la façon dont Sniper détermine les dernières lignes ne me plait guère
je préfère de loin ceci:
dernièreligne=Range("B65535").End(XlUp).Row+1
 

sniper2002

XLDnaute Occasionnel
Re : Comment enregistrer de USERFORM à une feuil Excel

re

merci pour vos réponses :
j'ai corrigé effectivement toutes les annoamiles constatées, mais ça ne fonctionne pas toujours ! et je vous avoue que je ne sais pas d'où vient le décalage!

Private Sub CommandButton6_Click()
Dim sheet As Worksheet
Dim S As Control
Dim T As String
Dim ligne As Long
Dim RowCount As Long

'Definir la feuil changement de PA'
Set sheet = Worksheets("Changement de PA")

'revoie la 1ère non vide dans la colonne A'
ligne = Range("A65536").End(xlUp).Row + 1

'Boucle sur les contrôles du Userform pour s'assurer qu'il ne sont pas vides'
For Each S In sheet.Control
Select Case True
Case TypeOf S Is MSForms.TextBox, TypeOf S Is MSForms.ComboBox
If S.Value = "" Then
MsgBox "Vous devez remplir tous les champs pour pouvoir enregistrer la baisse de prix !", _
vbExclamation, "Champ resté vide"
Exit Sub
End If
Case Else
End Select
Next S

'Quand tous contrôles sont remplis
RowCount = Worksheets("Changement de PA").Range("A2").CurrentRegion.Rows.Count
With Worksheets("Changement de PA").Range("A2")
.Offset(RowCount, 0).Value = Me.ComboBox1.Value
.Offset(RowCount, 1).Value = Me.TextBox1.Value
.Offset(RowCount, 2).Value = Me.TextBobox3.Value
.Offset(RowCount, 3).Value = Me.ComboBox2.Value
.Offset(RowCount, 4).Value = Me.TextBox4.Value
.Offset(RowCount, 5).Value = Me.TextBox5.Value
.Offset(RowCount, 6).Value = Me.TextBox6.Value
End With
End Sub


le code ci dessous est une combinaison de code (Livre VBA, internet, un peu de bon sens :) ...)
il y a des repliques que je ne sais pas interpreter dans le code.
l'objectif est : ce qui est saisi est enregister dans la dernière ligne vide de l'onglet "changement de PA"
merci encore une fois pour votre dipo et pour vos réponses
 

Pièces jointes

  • Copie.xls
    41 KB · Affichages: 206
  • Copie.xls
    41 KB · Affichages: 226
  • Copie.xls
    41 KB · Affichages: 227

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Comment enregistrer de USERFORM à une feuil Excel

Re,

tout d'abord, sur ton userform BCPA mettre un nouveau label ( label8)avec les propriétés suivantes:
.caption -----> "Veuillez remplir tous les champs"
.visible --------> false
agrandir la police et mettre le caractères en rouge

ensuite remplacer ton code par ce qui suit (en bleu)

'boutton enregistrer une baisse de prix'
Private Sub CommandButton6_Click()

Dim ligne As Long

'selectionner la feuille changement de PA'
Sheets("Changement de PA").Select

'Boucle sur les contrôles du Userform pour s'assurer qu'il ne sont pas vides'
If ComboBox1.Value = "" Or TextBox1.Value = "" Or TextBox3.Value = "" Or ComboBox2.Value = "" Or TextBox4.Value = "" Or TextBox5.Value = "" Or TextBox6.Value = "" Then
Label8.Visible = True
Exit Sub
End If

Label8.Visible = False

'revoie la 1ère non vide dans la colonne A'
ligne = Range("A65536").End(xlUp).Row + 1


'Quand tous contrôles sont remplis

Range("A" & ligne).Value = ComboBox1.Value
Range("B" & ligne).Value = TextBox1.Value
Range("C" & ligne).Value = TextBox3.Value
Range("D" & ligne).Value = ComboBox2.Value
Range("E" & ligne).Value = TextBox4.Value
Range("F" & ligne).Value = TextBox5.Value
Range("G" & ligne).Value = TextBox6.Value

End Sub




tu dois également modifier ceci ( en bleu)

dans

Private Sub workbook_Open()
BCPA.Label8.Visible = False
BCPA.Show
End Sub
 

Discussions similaires

Réponses
6
Affichages
287

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 019
dernier inscrit
BenKmc