IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enregistrer les données des textbox dans une feuille excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut Enregistrer les données des textbox dans une feuille excel
    Coucou tout le monde,

    J'ai besoin d'aide. J'ai deux UserForm. Le premier possède une listView qui contient des données et le deuxième contient le détail de chaque donnée de la première ListView du premier UserForm. Donc en cliquant sur une donnée de la listView, on a accès au UserForm2. Ce dernier possède des textBox et un commandBouton_enregistrer. Donc pour une donnée sélectionner dans ma listView, j'ai 16 données au niveau de mon UserForm2.
    Donc quand l'utlisateur clic sur Enregistrer, il enregistre les 16données dans une feuille excel comme le montre le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub Enregistrer()
    Dim i%
     
    NF$ = "Rex_Sauvegarde"
    Exit Sub
    'Efface les Données précédentes
    i% = Sheets(NF$).Range("D65536").End(xlUp).Row
    Sheets(NF$).Range("D2:D" & CStr(i%)).Clear
     
    'Copie les données
    Sheets(NF$).Range("D2").Value = TextBox1B
    Sheets(NF$).Range("D3").Value = TextBox2B
    Sheets(NF$).Range("D4").Value = TextBox3B
    Sheets(NF$).Range("D5").Value = TextBox4B
    Sheets(NF$).Range("D6").Value = TextBox5B
    'Sheets(NF$).Range("D7").Value = TextBox6B car TextBox6B n'existe pas
    Sheets(NF$).Range("D8").Value = TextBox7B
    Sheets(NF$).Range("D9").Value = TextBox8B
    Sheets(NF$).Range("D10").Value = TextBox9B
    Sheets(NF$).Range("D11").Value = TextBox10B
    Sheets(NF$).Range("D12").Value = TextBox11B
    Sheets(NF$).Range("D13").Value = TextBox12B
    Sheets(NF$).Range("D14").Value = TextBox13B
    Sheets(NF$).Range("D15").Value = TextBox14B
    Sheets(NF$).Range("D16").Value = TextBox15B
    Sheets(NF$).Range("D17").Value = TextBox16B
     
    'Copie les actions
    i% = Sheets(NF$).Range("D65536").End(xlUp).Row
    Sheets(NF$).Range("J2:N" & CStr(i%)).Clear
     
    i% = ListBox2.ListCount
    If i% > 0 Then
    Sheets(NF$).Range("K2:K" & CStr(i% + 1)) = ListBox2.List
    Sheets(NF$).Range("L2:L" & CStr(i% + 1)) = ListBox3.List
    Sheets(NF$).Range("M2:M" & CStr(i% + 1)) = ListBox4.List
    Sheets(NF$).Range("N2:N" & CStr(i% + 1)) = ListBox5.List
    End If
     
    If OptionButton1.Value = True Then Sheets(NF$).Range("H2").Value = "1"
    If OptionButton2.Value = True Then Sheets(NF$).Range("H2").Value = "2"
    If OptionButton3.Value = True Then Sheets(NF$).Range("H2").Value = "3"
     
    End Sub
    Cependant, je voudrais enregistrer chaque donnée sélectionné dans la listView c'est à dire que pour chaque donnée de la listView, je voudrais enregistrer les 16 données les unes à la suite des autres. Donc lors du premier enregistrement, j'aurai 16 données; lors du 2ème, 32 données et ainsi de suite.
    Comment pourrais je incrémenter sur les cellules pour pouvoir enregistrer les données les unes à la suite des autres?

    Help me, please

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir,
    je me suis permis de simplifier le code. Si j'ai bien compris, les données seront enregistrées à la suite des anciennes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub Enregistrer()
    Dim LastLig As Long
    Dim i As Byte, j As Byte
     
    With Sheets("Rex_Sauvegarde")
        LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        For i = LastLig To LastLig + 15
            If i Mod 7 <> 0 Then .Range("D" & i).Value = Me.Controls("TextBox" & i - LastLig + 1 & "B")
        Next i
     
        i = ListBox2.ListCount
        If i > 0 Then
            For j = 2 To 5
                .Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" & j).List
            Next j
        End If
     
        For j = 3 To 1 Step -1
            If Me.Controls("OptionButton" & j).Value = True Then
                .Range("H" & LastLig).Value = j
                Exit For
            End If
        Next j
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Re,

    Tout d'abord, Bonne annéee!!
    Je ne comprends pas cette partie de ton code. Peux tu stp me l'expliquer si ce n'est pas trop demander?!
    Merciii!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For j = 3 To 1 Step -1
        If Me.Controls("OptionButton" & j).Value = True Then
            .Range("H" & LastLig).Value = j
             Exit For
        End If
    Next j
    De plus, j'ai une erreur qui se lance lors du débogage sur code:
    "Le focus ne peut être déplacé sur le contrôle car celui-ci est invible; non activé ou d'un type n'acceptant oas le focus"

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    c'était une première approximation par rapport aux données fournies dans ton post
    que fait cette partie de ton code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If OptionButton1.Value = True Then Sheets(NF$).Range("H2").Value = "1"
    If OptionButton2.Value = True Then Sheets(NF$).Range("H2").Value = "2"
    If OptionButton3.Value = True Then Sheets(NF$).Range("H2").Value = "3"
    en Hx (x dernière ligne non? ou toujours la H2?) tu auras 3 si optionbutton3 est coché...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For j = 3 To 1 Step -1
            If Me.Controls("OptionButton" & j).Value = True Then
                .Range("H" & LastLig).Value = j
                Exit For
            End If
        Next j
    permet de parcourir tes optionbutton du 3 vers le 1 et écris le nombre correspondant dans Hx et sort de la boucle sur j

    L'erreur est explicite, essaie de voir l'état de tes controles.

    ps: ma proposition n'a pas été testée
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Re mercatog,

    ben oki je comprends mieux parcontre à quoi correspong LastLig? Si je comprends bien à la dernier ligne non vide?!!

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    LastLig correspond à la cellule en dessous de la dernière cellule remplie de la colonne D
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Re,

    ben en testant juste la première boucle avec LastLig, j'ai une erreur qui apparait: "Lobjet spécifié introuvable"

    En modifiant un peu ton code, j'ai une erreur d'incompatilité de type. Pourras tu m'éclairer stp?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Dim LastLig As Long
    Dim i As Byte, j As Byte
     
    NF$ = "Rex_Sauvegarde"
    Sheets(NF$).Activate
     
    With Sheets(NF$)
     
    'Copie les données
    LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 'ligne vide
    For i = LastLig To LastLig + 15
       If i Mod 7 <> 0 Then .Range("D" & i).Value = Me.Controls("TextBox" & i - LastLig + 1 & "B")
    Next i
     
    i = ListBox2.ListCount
    If i > 0 Then
       For j = 2 To 5
           .Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" + j).List
       Next j
    End If
     
     
    End With

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    désolé, j'avais déclaré i comme étant Byte! mais dans le corps i passait de LastLig à Lastlig+15 (qui est un Long)
    j'ai fais une translation, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub Enregistrer()
    Dim LastLig As Long
    Dim i As Byte,j As Byte
     
    With Sheets("Rex_Sauvegarde")
        LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        For i = 0 To 15
            If i <> 5 Then .Range("D" & LastLig+i).Value = Me.Controls("TextBox" & i + 1 & "B")
        Next i
     
        i = ListBox2.ListCount
        If i > 0 Then
            For j = 2 To 5
                .Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" & j).List
            Next j
        End If
     
        For j = 3 To 1 Step -1
            If Me.Controls("OptionButton" & j).Value = True Then
                .Range("H" & LastLig).Value = j
                Exit For
            End If
        Next j
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Mais j'ai quand une la même erreur au niveau de la deuxième boucle c-à-d au niveau du If i>0!!

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Re,

    Je tiens déjà à te remercier pour le temps que tu m'accordes et pour ton aide!!
    c bon, il a lair de fonctionner mieux mais javais une erreur ki s'est lancé: Dépassement d'espace. Alors j'ai changé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For j = 3 To 1 Step -1
     
    Moficication:
    For j = 1 To 3 Step 1
    Voilà.Penses tu que ça ira? Parcontre, j'ai une autre question. Je voudrais que l'utlisateur ne dépasse pas 5enregistrements en tout. Comment puis je poser cette condition?

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    encore une autre fois désolé!

    change la déclaration de i
    Edit:
    à force de réparer sans pour autant connaitre le but désiré, le travail est par moment bâclé (de ma part)
    Question,
    Que veux tu récupérer dans tes cellules Hx?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Je veux récupérer toutes les données rentrées et enregistrées par l'utilisateur. Au fait, j'ai une première UserForm1 avec une listView et un autre UserForm2 avec les textBox. Ainsi l'utilisateur en clikant sur une ligne dans la listView a accès au UserForm2.
    Donc quand il finit de faire ces modifications, il enregistre. Mais moi je ne veux pas qu'il dépense 5enregistrements soient 5X16cellules dans ma feuille excel!!

    Me comprends tu?

    Dans les cellules H, je veus marqué le nom de loption que l'utilisateur a choisi!!

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    as tu changé i As integer?
    que te donne

    ta dernière question est à traiter à part plus tard
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Re,

    Ben oui j'ai changé et le code fonctionne. J'ai pas eu d'erreur ou autre.

    Parcontre pourrais je,svp, avoir une aide sur ma dernière question?

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    pour ta dernière question, si tu veux que lastlig ne dépasse pas 16x5. tu peux faire une condition sur LastLig.

    Si tu peux expliciter mieux que tu sous entends qu'un utilisateur ne peut entrer plus de 5 enregistrement?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Ben pour le nombre d'enregsitrement, pour l'instant jne veux pas le prendre en compte.

    Cependant, j'aimerais savoir comment je peux copier le contenu d'une feuille vers une autre feuille?

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    ouvre un autre sujet sur le forum en explicitant clairement ta nouvelle question
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2014, 13h39
  2. [AC-2007] enregistrer les données sur état dans une table
    Par ouahab dans le forum Access
    Réponses: 1
    Dernier message: 14/05/2012, 15h12
  3. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  4. Réponses: 9
    Dernier message: 19/02/2007, 20h33
  5. Problème de lecture des cellules dans une feuille Excel
    Par wangjun dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2006, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo