[Excel - VBA]

Résolu
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007 - 7 août 2007 à 08:57
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007 - 7 août 2007 à 13:37
Bonjour chers programmeurs,

Suite à l'aide de hier, vraiment géniale de M. jrivet (ici)
J'ai quelques questions, enfait un problème

Voila alors, le formulaire dans le fichier excel, que vous pouvez trouver sur le lien ci dessus, marche super bine, merci encore.
Mais,
J'aimerais, que lorsque l'on insére la ligne, un nouveau formulaire se lance qui lui permette d'insérer les données via celui-ci.
Le document doit être modifiable uniquement par ce biais.
Et je ne vois pas comment insérer ces données sur la ligne crée.

Si une âme charitable veux bien m'aider, je ne dis pas non!
Sur ce bonne journée et peut-être a bientot!

Lucien B.

11 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 août 2007 à 09:11
Salut,

Et bien je dirais que c'est "assez simple"

Lorsque tu insère une ligne, tu connais le numéro de cette ligne.
Il te suffit donc de stocker le numéro de cette ligne dans une variable Public déclarée dans un module que tu auras ajouté.

L'idée est
'Dans un module
Public LigneInseree As Long

'Quand tu inseres la ligne
'on récupère la ligne de la catégorie suivante
LigneInseree = GetLigneItem(ComboBox1.List(ItemIndex + 1))
Call Rows(LigneInseree).Insert(xlDown)
'Ici tu appelle alors ton nouveau formulaire
Call Load(FormulaireSaisie)
Call FormulaireSaisie.Show(vbModal)

'[dans ton formulaire de saisie tu pourras
'aussi utiliser LigneInseree
'=> donc une fois les infos remplies
Range("A" & LigneInseree).Value = ValeurAMettreEnA
Range("B" & LigneInseree).Value = ValeurAMettreEnB
Range("C" & LigneInseree).Value = ValeurAMettreEnC
Call Unload(Me)
'...], ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 août 2007 à 10:00
Re,
Et bien ca tu le laisse ou c'est
'Quand tu inseres la ligne
'on récupère la ligne de la catégorie suivante
LigneInseree = GetLigneItem(ComboBox1.List(ItemIndex + 1 ))
Call Rows(LigneInseree).Insert(xlDown)
'Tu ajoute a la suite l'appel à ton nouveau formulaire
'Ici tu appelle alors ton nouveau formulaire
Call Load(FormulaireSaisie)

Call FormulaireSaisie.Show(vbModal)
'VbModal fera que le programme attendra le déchargement du
'nouveau formulaire pour continuer la fin du code

Le code suivant est dans ton formulaire de saisie (dans un bouton OK par exemple qui écrira les donnnées)

[dans ton formulaire de saisie tu pourras
'aussi utiliser LigneInseree
' => donc une fois les infos remplies
Range("A" & LigneInseree).Value = ValeurAMettreEnA
Range( "B" & LigneInseree).Value = ValeurAMettreEnB
Range("C" & LigneInseree).Value = ValeurAMettreEnC
Call Unload(Me)
'...]

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 août 2007 à 10:52
Salut,

'Si tu veux l'insérer dans WorkSheets(1)
   With Worksheets(1)
       .Range("B" & LigneInseree).Value = txt_a.Value
       .Range("C" & LigneInseree).Value = txt_b.Value
       .Range("D" & LigneInseree).Value = txt_c.Value
       .Range("E" & LigneInseree).Value = txt_d.Value
       .Range("F" & LigneInseree).Value = txt_e.Value
       .Range("G" & LigneInseree).Value = txt_f.Value
   End With
   Call Unload(Me)

'Si tu veux l'insérer dans la feuille appelé TOTO
   With WorksheetS("TOTO")
       .Range("B" & LigneInseree).Value = txt_a.Value
       .Range("C" & LigneInseree).Value = txt_b.Value
       .Range("D" & LigneInseree).Value = txt_c.Value
       .Range("E" & LigneInseree).Value = txt_d.Value
       .Range("F" & LigneInseree).Value = txt_e.Value
       .Range("G" & LigneInseree).Value = txt_f.Value
   End With
   Call Unload(Me), ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 août 2007 à 11:57
Ne peux-tu pas sélectionner la feuille directement plutôt que de vérifier laquelle est affichée ?
Sheets("blabla").Activate

ou encore nommer explicitement laquelle des feuilles tu veux utiliser
Sheets("blabla").Range("C" & LigneInseree).Value = txt_b.Value

MPi
3

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 août 2007 à 12:24
Re,
Sinon tu fais le test sur le nom de la feuille

If ActiveSheet.Name = Worksheets(1).Name Then

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007
7 août 2007 à 09:55
Merci pour ta réponse

Le module est crée, la variable déclarée.

Je ne suis pas sur d'avoir tout compris, mais merci

alors:
- un module
- et le reste sur le bouton ok ou bien?

Lucien
0
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007
7 août 2007 à 10:27
Merci ça marche sauf que (je sais pas si tu as gardé le fichier) pas toutes les feuilles sont les memes, alors je dois faire des tests avec des if.

du genre:

If ActiveSheet = Worksheet(1) Then
Range("B" & LigneInseree).Value = txt_a.Value
Range("C" & LigneInseree).Value = txt_b.Value
Range("D" & LigneInseree).Value = txt_c.Value
Range("E" & LigneInseree).Value = txt_d.Value
Range("F" & LigneInseree).Value = txt_e.Value
Range("G" & LigneInseree).Value = txt_f.Value
Call Unload(Me)
Else: Unload Me
End Sub

Je pense qu'il ya mieux, car cela ne marche pas ><

Lucien
0
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007
7 août 2007 à 11:15
D'accord merci bcp, mais, (ahlala toujours des mais ><)

par exemple, sur une feuille ce sera:
Range("B" & LigneInseree).Value = txt_a.Value
Range("C" & LigneInseree).Value = txt_b.Value
Range("D" & LigneInseree).Value = txt_c.Value
Range("E" & LigneInseree).Value = txt_d.Value
Range("F" & LigneInseree).Value = txt_e.Value
Range("G" & LigneInseree).Value = txt_f.Value

mais sur une autre ce sera:

Range("B" & LigneInseree).Value = txt_a.Value
Range("C" & LigneInseree).Value = txt_b.Value
Range("D" & LigneInseree).Value = txt_c.Value
Range("J" & LigneInseree).Value = txt_désignation2.Value

Alors je me demande si avec des with ça fait un test?
ou je dois obligatoirement prendre des if?

Merci, je suis un peu paumé, en tant que débutant-intérmediaire lol

Lucien
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 août 2007 à 11:23
Re,
Le With ne fait pas de test.

Mais Toi tu dois savoir si tu mets les valeurs sur telle ou telle feuille
Donc oui peu être devra tu faire un IF

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007
7 août 2007 à 11:50
Re,
J'ai fait ceci:

If ActiveSheet = Worksheets(1) Then
    Range("B" & LigneInseree).Value = txt_a.Value
    Range("C" & LigneInseree).Value = txt_b.Value
    Range("D" & LigneInseree).Value = txt_c.Value
    Range("E" & LigneInseree).Value = txt_d.Value
    Range("F" & LigneInseree).Value = txt_e.Value
    Range("G" & LigneInseree).Value = txt_f.Value
    Range("I" & LigneInseree).Value = designation1.Value
    Range("J" & LigneInseree).Value = designation2.Value
    Range("K" & LigneInseree).Value = txt_ouverture.Value
    Range("L" & LigneInseree).Value = txt_fermeture.Value
    Range("M" & LigneInseree).Value = txt_compta1.Value
    Range("N" & LigneInseree).Value = txt_compta2.Value
    Range("O" & LigneInseree).Value = txt_compta3.Value
Call Unload(Me)
End If

mais il me dit methode non geree, sur If ActiveSheet = Worksheets(1) Then

Do you know why?
0
cs_makakdef Messages postés 50 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 31 août 2007
7 août 2007 à 13:37
Nickel!
Merci beaucoup a vous deux!
J'ai préferé utiliser la méthode à jrivet (cela ne veut pas dire que la méthode a MPi ne marche pas!)

Franchement vous assurez grave!

Lucien
0
Rejoignez-nous