Enregistrement de données

Résolu/Fermé
BBdolph - 11 juin 2008 à 16:26
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 12 juin 2008 à 14:14
Bonjour à toutes et à tous,

Je suis novice en programmation vba et je dois faire quelque chose d'assez lourd!!!!
Je résume la situation : J'ai une feuille de donnée excel avec plusieurs colonnes. Dans une colonne, les seules réponses possibles sont "NON" et "OUI". Par défaut, la cellule affiche "NON", lorsque je double click dans la cellule, "OUI" s'affiche et un userform apparaît. Jusque là, tout va bien. Ce qu'il y a, c'est que je souhaiterai que les informations se trouvant dans mon fichier de base s'affiche dans le userform (les informations de la ligne séléctionnée).
J'ai testé quelques codes, mais rien ne marche.
Ce serait formidable si quelqu'un pouvait me sortir de cette situation car franchement, je cale.
Merci à tous

6 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
11 juin 2008 à 18:23
Bonjour,
quand ton formulaire s'ouvre, tu peux provoquer sa mise à jour grâce à l'évènement Activate (clique droit sur ton userform, puis Code)
ainsi, tu peux mettre à jour le contenu de ses contrôles.
pour faire référence à la ligne active de ton fichier Excel, utilise ActiveSheet.ActiveCell
Pour exemple :
Private Sub UserForm_Activate()
Me.Label1 = "Hello"
Me.TextBox1 = ActiveSheet.ActiveCell.Value
Me.TextBox2 = ActiveSheet.ActiveCell.Offset(0,1).Value
End Sub

A suivre...
0
Bonjour Ivan_hoe,

Merci beaucoup pour ta réponse mais ça ne marche pas.
Il me met un code d'erreur "code 438".

Je vais essayer de détailler mon problème. J'ai donc ma base excel avec des colonnes qui vont de A à O. La colonne I est la colonne "OUI / NON" (formule VBA). Donc quand je dis "OUI", un userform s'ouvre. Je souhaiterai lorsque le userform s'ouvre qu'il affiche dans le textbox1 les données se trouvant dans la colonne A ligne sélectionnée. Et ainsi de suite pour les autres textboxs.

J'espère avoir été assez précise dans l'exposé de mon problème!!!

Merci de me venir en aide.
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
12 juin 2008 à 09:53
Bonjour BBdolph,
j'avais bien compris ta problématique.
Peux-tu me dire ce que tu as mis dans ta procédure Private Sub UserForm_Activate() ?
A quel ligne de code est-ce que ça génère un message d'erreur 438 ?
Si tu le souhaites (et s'il n'y a rien de confidentiel), tu peux joindre ton fichier dans www.cijoint.fr
A suivre...

un autre exemple :
Private Sub UserForm_Activate()
TextBox1 = cells(ActiveCell.Row, 1).Value ' affiche la valeur en A
TextBox2 = cells(ActiveCell.Row, 2).Value ' affiche la valeur en B
End Sub
0
Rebonjour Ivan-hoe,

Je viens d'essayer le deuxième exemple et ça marche. C'est grandiose!!!!!!!!!!!

Je te remercie infiniment pour tes conseils.

Pour info, la première fois, j'avais mis :

Private Sub UserForm_Activate()
Me.txte_affaire = ActiveSheet.ActiveCell.Offset(0, 1).Value
End Sub

Mais maintenant, tout fonctionne très bien grâce à toi.

Encore mille merci pour ton aide.

BBdolph
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
12 juin 2008 à 10:09
Bon, c'est cool !
En fait, c'est le Activesheet dans le premier exemple qui posait problème.
Bonne continuation.
I.
0
Je me permet de revenir vers toi, car je suis face à un autre problème et tu as l'air très calé.

Donc mon userform s'ouvre (avec les éléments de la ligne) et je demande à compléter les informations qui vont s'enregistrer sur la même ligne. Jusque là, nickele!! Lorsque tu séléctionne un champ précis, tu ouvres un nouveau classeur excel et tu enregistres les informations dans les 2 classeurs.

Le problème est que sur le deuxième classeur, il enregistre toutes les informations sur la même ligne.

En tant normal, je sais faire pour que vba enregistre les informations à la ligne suivante mais là je pense que ça fait doublon avec l'enregistrement sur la feuille de base.

Je veux bien te faire parvenir le fichier mais aurais-tu un autre site car mon fichier n'est pas confidentiel mais c'est dans le cadre de mon travail et plus c'est discret mieux c'est!!!!!!

Merci de ta réponse

BBdolph
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
12 juin 2008 à 11:11
Déjà, peut-on jeter un oeil au code qui enregistre les éléments dans 2 fichiers différents ?
Merci.
0
Je viens de trouver une réponse, dans le classeur "PlanningLivraison", il y avait une ligne vide (pour la mise en page) et lorsque je supprime cette ligne, le code fonctionne très bien.
Ceci dit, ça n'explique pas pourquoi l'autre code marchait pas car je lui demandais de commencer la séléction à la ligne 4 (après la mise en page).

Voici pour ce problème, je te remercie beaucoup de m'avoir aidé ainsi. C'est formidable!!!!!!

J'ai une dernière petite question, si à l'avenir, je cale encore, puis-je faire appel à tes connaissances?????

Encore merci,
BBdolph
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Voici les codes :

Private Sub cbo_enr_Click()
Dim lignevide As Integer
Dim ligne As Integer
ligne = ActiveCell.Row

If MsgBox("Confirmez-vous l'enregistrement ? ", vbQuestion + vbYesNo, strAppName) = vbYes Then
Range("J" & ligne).Value = cbo_etat.Value
Range("K" & ligne).Value = cbo_montant.Value
Range("K:K").Select
Selection.NumberFormat = "#,##0.00 $"
Range("L" & ligne).Value = cbo_sem.Value
Range("M" & ligne).Value = txt_type.Value
Range("N" & ligne).Value = txt_temps.Value
Range("O" & ligne).Value = txt_add.Value
End If

ActiveWorkbook.Save
Me.Hide

If cbo_etat.Value = "Commande" Then

chemin = ActiveWorkbook.Path

Workbooks.Open chemin & "\PlanningLivraison.xls"
Sheets(cbo_sem.Value).Select

lignevide = 4

If Range("A5").Value <> "" Then
Range("A4").Select
Selection.End(xlDown).Select
lignevide = ActiveCell.Row + 1
End If

Range("A" & lignevide).Value = txte_affaire
Range("B" & lignevide).Value = txte_depot
Range("C" & lignevide).Value = txte_client
Range("D" & lignevide).Value = txte_chantier
Range("E" & lignevide).Value = txt_type
Range("F" & lignevide).Value = txt_add

ActiveWorkbook.Save

End If
Voilà. Il m'enregistre bien les informations lors de l'ouverture du deuxième classeur (NB: mon classeur comporte 52 feuilles=52 semaines et cbo_sem ouvre automatiquement la feuille, ex: semaine 20 ouvre la feuille 20) mais enregistre sur la même ligne lorsqu'on choisit plusieurs fois une semaine!!!!!
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
12 juin 2008 à 14:14
L'ordinateur ne se trompe jamais.
Le problème vient de là :
lignevide = 4
If Range("A5").Value <> "" Then
Range("A4").Select
Selection.End(xlDown).Select
lignevide = ActiveCell.Row + 1
End If

SI A5 est vide, alors lignevide conserve la valeur 4 , donc tu écris tes valeurs en A4 et A5 reste éternellement vide.
Il faudrait modifier en
If Range("A4").Value <> "" Then

Pour tes questions à venir, pas de souci, poste un message sur CCM : si ce n'est pas moi qui réponds, ce sera un autre et tu ne perdras pas au change.
I.
0