VBA récupérer les donnée saisie dans un formulaire

Venitien

XLDnaute Occasionnel
Bonjour à tous,

Je suis nouveau sur le forum car j'ai un problème que je n'arrive pas à résoudre. J'ai cherché dans les sujet avant de créer mais rien ne correspond à ce dont j'ai besoin.

J'ai dans un classeur 4 feuilles.
- la première contient un formulaire avec plusieurs questions (que je rempli en fonction des réponses que j'obtiens) + Une liste déroulante ou je choisis si les données seront copiées en feuille 3 ou 4 + un bouton "Valider la saisie"

- Sur la feuille 2, je récupère toutes les données saisies sur la feuille 1 mais classées en colonnes (une colonne par thème de question: Date, météo...) et sans le reste du formulaire. J'utilise simplement =Feuil1!"cellule de référence" pour se faire.

- Sur la feuille 3, je voudrais que les données (classées en ligne) de la feuille2 soient copiées ici quand je clique sur "valider la saisie", si l'argument "Feuille 3" est sélectionné.

- Sur la feuille 4, je veux la même chose que sur la 3 mais si l'argument "feuille4" est sélectionné.


Pour le code VBA, j'ai pensé à une méthode (peut-être un peu bourrin) type:

Private Sub CommandButton1_Click()
If Cells(2, 2) = 1 Then
Worksheets("Feuil2").Activate
Application.Rows(2).Select
Selection.Copy
Sheets("Feuil3").Select
Application.Rows(2).Select
ActiveSheet.Paste
Else
If Cells(2, 2) = 2 Then
Worksheets("Feuil2").Activate
Application.Rows(2).Select
Selection.Copy
Sheets("Feuil4").Select
Application.Rows(2).Select
ActiveSheet.Paste
Else
MsgBox "pas de feuille sélectionnée"
End If
End If
End Sub


Je dis "un peu bourrin" car l'objectif final est de répartir les données saisies parmi un choix de 8 feuilles (j'ai simplifier pour l'explication), donc il y aura avec ma méthode pas moins de 9 If emboités...

Les Problèmes à présent

- avec ma méthode, je peux choisir sur qu'elle feuille coller les données, mais quand j'efface mon questionnaire (ou que je fais une nouvelle saisie, les données en feuille 2 sont remplacées (normal est ça me va) mais aussi celles de la feuille ou j'ai envoyé mes premières données (et ça c'est nul).

- Je voudrais que les données ne se modifient plus une fois collées en feuille 3 ou 4

- autre problème, je voudrais que sur les feuille 3 ou 4, le collage se fasse dans la première ligne vide en partant du haut.

Des solutions ???????????

Merci!
 
C

Compte Supprimé 979

Guest
Re : VBA récupérer les donnée saisie dans un formulaire

Salut Venitien

Sans fichier, ça va être compliqué de t'aider !?
Si trop gros tu peux le mettre sur dl.free.fr

A+
 

Venitien

XLDnaute Occasionnel
Re : VBA récupérer les donnée saisie dans un formulaire

Bonjour BrunoM45,

Je passe par une feuille 2 pour ranger mes résultats en ligne, avant de copier cette ligne dans une ligne de mes feuille 3 ou 4 selon ce que j'ai choisit. Mais cette ligne peut être mise sur une autre page en masquée ou n'importe.
Le VBA gère surement directement tout ça mais comme je suis pas trop calé (je connais mieux VBA sous Word), j'ai cherché à limiter les étapes VBA.
 
C

Compte Supprimé 979

Guest
Re : VBA récupérer les donnée saisie dans un formulaire

Re,

Ok, je comprends mieux ;)
Voici le code optimisé sans passer par la feuille 2 et sans activer les feuilles
Code:
Private Sub CommandButton1_Click()
  Dim NomSht As String, Dlig As Long
  ' Mémoriser le nom de la feuille : pas obligatoire
  NomSht = Me.Range("C2").Value
  On Error GoTo Err_Sub
  ' Avec la feuille mémorisée
  With Sheets(NomSht)
    ' Trouver le numéro de la dernière ligne remplie
    Dlig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Inscrire sur la ligne du dessous les données souhaitées
    .Range("A" & Dlig + 1) = Range("B4")
    .Range("B" & Dlig + 1) = Range("B5")
  End With
  ' Sortir de la Sub
  Exit Sub
  ' En cas d'erreur
Err_Sub:
  MsgBox "la feuille n'existe pas encore"
  On Error GoTo 0
End Sub

A+
 

Venitien

XLDnaute Occasionnel
Re : VBA récupérer les donnée saisie dans un formulaire

Merci beaucoup pour le code.

ça marche du tonnerre, mais j'ai une petite question, tu as supprimé les If et effectivement c'est plus propre comme code. Mais pour chaque cellule il faut que je recopie :
Code:
.Range("A" & Dlig + 1) = Range("B4")
en adaptant, et ce de ma première à me trentième cellule?

Le faire n'est pas un souci, mais est-ce que le code ne sera pas un peu lourd?

Encore merci, A+
 
C

Compte Supprimé 979

Guest
Re : VBA récupérer les donnée saisie dans un formulaire

Re,

Tu veux dire que dans ta feuille 1 tu as 30 cellules à copier dans ta feuille de destination !?

Il faut alors mettre une boucle
Code:
Private Sub CommandButton1_Click()
  Dim NomSht As String, Dlig As Long, Lig As Long
  ' Mémoriser le nom de la feuille : pas obligatoire
  NomSht = Me.Range("C2").Value
  On Error GoTo Err_Sub
  ' Avec la feuille mémorisée
  With Sheets(NomSht)
    ' Trouver le numéro de la dernière ligne remplie
    Dlig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Inscrire sur la ligne du dessous les données souhaitées
    For Lig = 4 To 33 ' 30 lignes à copier
      ' Ici la variable Lig (ligne) devient une colonne dans : Cells(Ligne,Colonne)
      .Cells(Dlig + 1, Lig - 3) = Range("B" & Lig)
    Next Lig
  End With
  ' Sortir de la Sub
  Exit Sub
  ' En cas d'erreur
Err_Sub:
  MsgBox "la feuille n'existe pas encore"
  On Error GoTo 0
End Sub

A+
 

Venitien

XLDnaute Occasionnel
Re : VBA récupérer les donnée saisie dans un formulaire

Une dernière chose s'il te plais, est-ce possible d'exclure des cellules de la copie?
Par exemple je veux reprendre toute ma colonne C de 3 a 53
Code:
 For Lig = 3 To 52 ' 50 lignes à copier
      ' Ici la variable Lig (ligne) devient une colonne dans : Cells(Ligne,Colonne)
      .Cells(Dlig + 1, Lig - 1) = Range("D" & Lig)

Mais pas C4 par exemple. (Les cellules a exclure ne varient pas)

Merci encore
 
C

Compte Supprimé 979

Guest
Re : VBA récupérer les donnée saisie dans un formulaire

Salut Venitien

Il suffit de mettre un test dans la boucle ;)
Code:
    For Lig = 3 To 52 ' 50 lignes à copier
    ' Ne pas copier la ligne 4
    If Lig <> 4 then
      ' Ici la variable Lig (ligne) devient une colonne dans : Cells(Ligne,Colonne)

      .Cells(Dlig + 1, Lig - 3) = Range("B" & Lig)
    End IF
    Next Lig

A+
 

Venitien

XLDnaute Occasionnel
Re : VBA récupérer les donnée saisie dans un formulaire

Salut,

Merci pour ta réponse, mais cela me donne une erreur
Code:
 For Lig = 3 To 54 ' 50 lignes à copier
    'ne pas copier la ligne 5
    If Lig <> 5 Then
          ' Ici la variable Lig (ligne) devient une colonne dans : Cells(Ligne,Colonne)
      .Cells(Dlig + 1, Lig - 2) = Range("D" & Lig)
    Next Lig

J'ai un message d'erreur next sans for...

Merci
 

Discussions similaires

Réponses
14
Affichages
311
Réponses
3
Affichages
558

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA