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 :

Perte d'une valeur dans une boucle d'un UserForm [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 18
    Par défaut Perte d'une valeur dans une boucle d'un UserForm
    Bonjour à tous,

    Je suis pas très performant en VBA, et même après beaucoup de lectures et d'essais sur mon code, je ne parviens pas à résoudre le souci...

    J'ai fait un UserForm VBA qui me permet de rentrer des valeurs (8 lignes à chaque fois) à insérer dans une tableau de 7 colonnes, à partir de la ligne 21 et colonne H.
    Je veux que l'insertion se fasse maximum 9 fois d'affilée.
    J'ai une CmdBox qui me permet de valider la saisie et l'insérer dans la feuille, voici son code :
    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
     
    Private Sub CmdNouvelle_Click()
        If IDStructure = "" Then
            MsgBox " Identifiant structure obligatoire"
            IDStructure.SetFocus
            Exit Sub
        End If
     
    Dim i, cell As Byte
    cell = 21
    For i = 1 To 8
     
         If Sheets("Fiche").Cells(cell + i, 8) = "" Then
            Sheets("Fiche").Cells(cell + i, 8) = Saisie3F.Controls("IDStructure")
            Sheets("Fiche").Cells(cell + i, 9) = Saisie3F.Controls("Embranchement" & i)
            Sheets("Fiche").Cells(cell + i, 10) = Saisie3F.Controls("Recouvrement" & i)
            Sheets("Fiche").Cells(cell + i, 11) = Saisie3F.Controls("Sp1_" & i)
            Sheets("Fiche").Cells(cell + i, 12) = Saisie3F.Controls("Sp2_" & i)
            Sheets("Fiche").Cells(cell + i, 13) = Saisie3F.Controls("Sp3_" & i)
            Sheets("Fiche").Cells(cell + i, 14) = Saisie3F.Controls("Sp4_" & i)
     
        Else:
        cell = cell + 8
            If Sheets("Fiche").Cells(cell + i, 8) = "" Then
            Sheets("Fiche").Cells(cell + i, 8) = Saisie3F.Controls("IDStructure")
            Sheets("Fiche").Cells(cell + i, 9) = Saisie3F.Controls("Embranchement" & i)
            Sheets("Fiche").Cells(cell + i, 10) = Saisie3F.Controls("Recouvrement" & i)
            Sheets("Fiche").Cells(cell + i, 11) = Saisie3F.Controls("Sp1_" & i)
            Sheets("Fiche").Cells(cell + i, 12) = Saisie3F.Controls("Sp2_" & i)
            Sheets("Fiche").Cells(cell + i, 13) = Saisie3F.Controls("Sp3_" & i)
            Sheets("Fiche").Cells(cell + i, 14) = Saisie3F.Controls("Sp4_" & i)
            End If
     
        End If
    Next i
        Saisie3F.Hide 'masque le formulaire
        Unload Saisie3F 'ca le sort de la mémoire
        MsgBox "Ajouté à la fiche"
        Saisie3F.Show 'Affiche à nouveau le formulaire pour poursuivre la saisie
    End Sub
    Cela marche pour les 2 premières itérations, mais ensuite, à chaque fois que je re-soumet le formulaire, il me supprime une ligne a partir du haut, puis deux, puis trois et ainsi de suite...
    Je me doute qu'il y a un problème dans ma boucle mais je n'arrive pas à le trouver...

    Merci d'avance, et désolé d'avance pour mon code qui doit être loin de celui d'un programmateur..

    Etienne

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Ne pas oublier qu'il y a un forum destiné aux macros...

    Plutôt que de mettre une valeur fixe (21),
    cell = 21
    calcule le nombre de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell = Sheets("Fiche").Cells(Rows.Count, "H").End(xlup).row + 1

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 18
    Par défaut
    Bonjour, merci de votre réponse et désolé pour la nouvelle rubrique, il me semble qu’un modérateur a pu rectifier et merci à lui.
    Concernant le «*21*» ce n’est pas le nombre de lignes mais en fait la ligne à partir de laquelle doit commencer la saisie. Je n’ai pas le fichier avec moi là, mais je vous le joins dès que possible pour faciliter la compréhension.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quand parmi parle de "calcule le nombre de lignes", c'est très précisément pour éviter de faire commencer ta procédure à chaque fois à la ligne 21, mais de trouver la première ligne non vide en partant du bas, afin d'écrire juste en dessous

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    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
    Private Sub CmdNouvelle_Click()
        If IDStructure = "" Then
            MsgBox " Identifiant structure obligatoire"
            IDStructure.SetFocus
            Exit Sub
        End If
        Dim i, tableau, texte
        For i = 1 To 8
            texte = Saisie3F.Controls("IDStructure") & ","
            texte = texte & Saisie3F.Controls("Embranchement" & i) & "," & Saisie3F.Controls("Recouvrement" & i) & "," & Saisie3F.Controls("Sp1_" & i) _
                  & "," & Saisie3F.Controls("Sp2_" & i) & "," & Saisie3F.Controls("Sp3_" & i) & "," & Saisie3F.Controls("Sp4_" & i)
            tableau = Split(texte, ",")
            Sheets("Fiche").Cells(Rows.Count, 8).End(xlUp).Offset(1, 0) = Application.Transpose(tableau)
        Next i
        Saisie3F.Hide    'masque le formulaire
        Unload Saisie3F    'ca le sort de la mémoire
        MsgBox "Ajouté à la fiche"
        Saisie3F.Show    'Affiche à nouveau le formulaire pour poursuivre la saisie
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 18
    Par défaut
    Bonjour,

    Merci beaucoup pour votre aide, ça fonctionne maintenant !

    Au top comme site & forum, j'ai énormément appris entre les tutoriels, fiches, et aides personnalisées comme maintenant !

    Au plaisir

    Etienne

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/03/2016, 14h14
  2. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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