Excel et vba:comment envoyer des données dans excel et simplifier des lignes de

jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008 - 16 mai 2006 à 20:12
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 18 mai 2006 à 08:58
Bonjour,






Alors j'explique le problème que j'ai:




J'ai 4 userform, à partir de userform4 je selectionne l'année et le mois dans des textbox et ensuite je clique sur une bouton au choix(parmi 3) pour me diriger soit vers userform1, 2 ou 3. dans ces userform je dois remplir des cases avec des chiffres, ces chiffres vont se mettre dans une feuille excel.




Comment je peux faire pour que dans ma base de données l'année et le mois apparaissent sur la même ligne que mes données sélectionnées dans l'une des autres userform?




et, est il possible d'écrire un programme qui s'appliquerai à toutes les données? Par exemple pour ma userform1 j'ai 6 onglets, sije vais dans le premier, comment puis-je écrire que toutes mes données doivent être numéric et non nulles (sinon il y aura un message d'erreur) sans avoir besoin de l'écrir pour chaque textbox. sinon ca me fait 320 fois les mêmes programmes à écrire.




Si vous pouviez m'aider.




merci




Jamelie




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>

5 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2006 à 10:00
Bonjour

1) pour passer la date et les params de UserForm4 (évite les noms par défauts), tu peux utiliser des variables publiques dans un module.

2) Pour éviter les ...lignes de code, tu peux tout centrer sur une seule méthode qui sera appelée depuis les events des textbox.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
17 mai 2006 à 10:38
excuse moi je m'y connais pas trop en vba et je comprend pas exactement ce que tu as voulu dire. Pour éviter les lignes de code j'ai voulu mettre le nom de toutes mes text box dans un programme à la suite mais le  programme ne fonctionne que si je met une text box à la fois. je suis désolée de pas comprendre. merci quand meme de m avoir aidé
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2006 à 10:48
Bonjour

Pour tester si ton champ a une valeur numérique différence de 0 :

private function TestTextBox(byref pTxtBx as textbox) as boolean
    on error goto err_TestTextBox
    if val(pTxtBx.Text)=0 then
       pTxtBx.BackColor=RGB(255,0,0) 'textbox en rouge
       TestTextBox=false
    else
       pTxtBx.BackColor=RGB(255,255,255) 'textbox en blanc

       TestTextBox=true

   End if
    On error goto 0
    Exit function
:err_TestTextBox
    err.clear
       pTxtBx.BackColor=RGB(255,0,0) 'textbox en rouge

       TestTextBox=false

   On error goto 0
End function

Ensuite à chaque event :
private sub TxtEvent(...)
    CheckTextBox
End sub

private sub CheckTextBox
    dim lBoo as boolean
    dim lText as textbox
   
    lBoo=true
   
    ltext=TextBox1 'à personaliser
    lBoo=lBoo and TestCheckBox(ltext)

    if lBoo=false then
       'Un champ au moins est nul ou non numérique
    else
       'TVB
    End if
End sub

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
jamelie Messages postés 57 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 27 février 2008
17 mai 2006 à 11:29
re bonjour
ca ve pas marcher mais bon en même temps j'ecris peut etre pas les bons trucs. je vais te monter ce que j'avais fait avant comme ca peut etre que ce sera plus facil pour expliquer.

Déclarations

Sub CdBSave1_Click()
' instructions vérifiant la validité des données
  UserForm1.Hide
  Call validConditions(REC1.Value, REC2.Value, REC3.Value, REC4.Value, REC5.Value, REC6.Value, REC7.Value, REC8.Value, REC9.Value, REC10.Value, REC11.Value, REC12.Value, REC13.Value, _
  REC14.Value, REC15.Value, REC16.Value, REC17.Value, REC18.Value, REC19.Value, REC20.Value, REC21.Value, REC22.Value, REC23.Value, REC24.Value, REC25.Value, REC26.Value, REC27.Value)
End Sub


Sub CdBAnnuler1_Click()
' si on clique sur annuler la page se ferme
  Unload UserForm1
  Dim confirm As Single
  confirm = MsgBox("Si vous annulez la procédure, vous perdrez toutes les données entrées. " _
  & "Etes-vous sûr de vouloir annuler?", vbYesNo + vbCritical, "Abandon de la procédure")
    If confirm = vbYes Then
      UserForm1.Hide
      Exit Sub
    End If
End Sub




module 1



Sub validConditions(REC1, REC2, REC3, REC4, REC5, REC6, REC7, REC8, REC9, REC10, REC11, REC12, REC13, _
  REC14, REC15, REC16, REC17, REC18, REC19, REC20, REC21, REC22, REC23, REC24, REC25, REC26, REC27)
    With BDD1
      If IsNumeric(REC1) = False Then     'tu vois ici je peut l'appliquer que pour la première textbox et pas les autres
        bon = MsgBox(REC1 & " n'est pas une valeur valide. Entrer une valeur valide", _
        vbExclamation, "Valeur non valide")
        UserForm1.Show
      End If
    End With
End Sub

Merci encore
Jamelie
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 mai 2006 à 08:58
Bonjour

Si tu utilise ma méthode en changeant quelques petits ça devrait marcher :

private sub CheckTextBox(byref pTxt1 as TextBox, byref pTxt2 as TectBox, ...)
    dim lBoo as boolean
    dim lText() as textbox
    dim i as long

    Redim lText(0 to 10)   'pour 11 textbox

    lText(0)=pTxt1
    lText(1)=pTxt2
    ...

    lBoo=true
   
    for i=0 to ubound(lText)
        lBoo=lBoo and TestCheckBox(ltext(i))
    Next

    if lBoo=false then
       'Un champ au moins est nul ou non numérique
    else
       'TVB
    End if
End sub

Et tu remplace :

Call validConditions(REC1.Value, REC2.Value, REC3.Value, REC4.Value,
REC5.Value, REC6.Value, REC7.Value, REC8.Value, REC9.Value,
REC10.Value, REC11.Value, REC12.Value, REC13.Value, _

  REC14.Value,
REC15.Value, REC16.Value, REC17.Value, REC18.Value, REC19.Value,
REC20.Value, REC21.Value, REC22.Value, REC23.Value, REC24.Value,
REC25.Value, REC26.Value, REC27.Value)

par :

CheckTextBox REC1, REC2, REC3, REC4,
REC5, REC6, REC7, REC8, REC9,
REC10, REC11, REC12, REC13, _

  REC14,
REC15, REC16, REC17, REC18, REC19,
REC20, REC21, REC22, REC23, REC24,
REC25, REC26, REC27)

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
Rejoignez-nous