Données d'un userform vers une autre feuille excel

Résolu/Fermé
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016 - Modifié par jordane45 le 26/02/2016 à 10:36
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016 - 26 févr. 2016 à 12:44
Bonjour,
Bonjour à toutes et à tous,

Je débute dans Visual Basic et je ne connais que quelques codes.
En farfouillant dans les tutos et forums j'ai quand même réussi à créer un Userform qui fonctionne très bien si le formulaire apparait sur la feuille en question
Il s'agit d'un formulaire de saisie de données qui intègre les données dans la feuille LBP;

J'ai créé une feuille Menu pour mettre un bouton de commande me permettant d'afficher le userform indépendamment de la feuille LBP
Dans mon Userform il y a un bouton valider pour que les données soient intégrées toujours à la 3eme ligne de la feuille LBP en décalant les données déjà saisies vers le bas..
Et c'est là où les ennuis commencent;
Quand je valide depuis la feuille menu , les données précédentes sont écrasées dans la ligne 3 de la feuille LBP et ça me décale les lignes vers le bas dans la feuille menu.

Que dois je rajouter comme code pour que tout fonctionne à partir de la feuille menu (sans faire apparaitre la feuille LBP)

Ci dessous le code en question;
Private Sub CommandButton3_Click()


Rows("3:3").Select
Selection.Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove

Sheets("LBP").Range("A3").Value = ComboBox1
Sheets("LBP").Range("B3").Value = TextBox1
Sheets("LBP").Range("C3").Value = TextBox2
Sheets("LBP").Range("D3").Value = TextBox3
Sheets("LBP").Range("E3").Value = TextBox4
Sheets("LBP").Range("F3").Value = TextBox5
Sheets("LBP").Range("G3").Value = TextBox6
Sheets("LBP").Range("H3").Value = DTPicker1
Sheets("LBP").Range("I3").Value = TextBox8
Sheets("LBP").Range("J3").Value = ComboBox2



End Sub


D"avance merci pour vos conseils

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
26 févr. 2016 à 10:35
Bonjour,

Sheets("LBP").Rows("3:3").Select 

1
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016
26 févr. 2016 à 10:42
J'avais déjà essayé mais ça me met une erreur d'exécution 1004
"La méthode Select de la classe Range a échoué" !!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 févr. 2016 à 11:21
Bonjour,

Bloc With...End With :

Private Sub CommandButton3_Click()
With Sheets("LBP")
    .Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
    .Range("A3").Value = ComboBox1
    .Range("B3").Value = TextBox1
    .Range("C3").Value = TextBox2
    .Range("D3").Value = TextBox3
    .Range("E3").Value = TextBox4
    .Range("F3").Value = TextBox5
    .Range("G3").Value = TextBox6
    .Range("H3").Value = DTPicker1
    .Range("I3").Value = TextBox8
    .Range("J3").Value = ComboBox2
End With
End Sub

0
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016
26 févr. 2016 à 11:28
Merci beaucoup,

ça fonctionne exactement comme je voulais...trop bien !!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016
26 févr. 2016 à 11:40
Toujours prendre cette habitude, lorsque tu es sur un UserForm, de référencer les feuilles dans un bloc With...End With.
Deux raisons à cela :
> l'accessibilité à la feuille sans la sélectionner => fonctionne à coups sur (sauf protection)
> la facilité d'écriture du code.
0
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
26 févr. 2016 à 11:56
Merci pour le conseil,
C'est vrai que ça simplifie le code sans mettre Sheets à chaque ligne et si je comprends bien ça embarque tous les codes se référant à la feuille dans un seul bloc?

Si j'abuse encore un peu , une fois validées les données, les champs du Userform1 restent remplis et j'aimerais qu'ils se vident

Si je mets ce code en plus:

Unload Userform1
Download Userform1
UserForm1.Show


Y a t'il une autre méthode?
0
fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016
26 févr. 2016 à 12:02
Pardon, Load à la place de Dowload
ça fonctionne mais est ce la bonne méthode?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > fairway111 Messages postés 13 Date d'inscription vendredi 26 février 2016 Statut Membre Dernière intervention 3 mars 2016
26 févr. 2016 à 12:06
tous les codes se référant à la feuille dans un seul bloc?
Pas tous. Sont "rattachés" à la feuille uniquement les Range précédés d'un point. Les autres se réfèrent à la feuille active.
Exemple :
'on place la feuil1 comme feuille active
Sheets("Feuil1").Select
'on fait référence à la Feuil2 dans le bloc With :
With Sheets("Feuil2")
    'avec un point devant : on agit sur la Feuil2
    .Range("A1") = 18
    'sans le point on agit sur la feuille active : Feuil1
    Range("A2") = 13
End With

Avec l'habitude ça vient...

Y a t'il une autre méthode?
Oui.
Pour cela, j'ai l'habitude de passer par une fonction à part.
Dans ton exemple, avec les contrôles que tu nous indiques, cela donnerait :

Sub Vide_Controles()
    ComboBox1.ListIndex = 0
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    TextBox4.Value = ""
    TextBox5.Value = ""
    TextBox6.Value = ""
    DTPicker1 = Date 'remet par défaut la date du jour
    TextBox8.Value = ""
    ComboBox2.ListIndex = 0
End Sub


Et donc, pour vider l'UserForm, tu n'as qu'à placer dans ton code, ou tu le souhaites :
Call Vide_Controles
0