[Excel - VBA] [Résolu]

Signaler
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007
-
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007
-
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
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
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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?
Messages postés
50
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
31 août 2007

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