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 :

Envoi d'une variable d'un formulaire vers une cellule [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 28
    Par défaut Envoi d'une variable d'un formulaire vers une cellule
    Bonjour !

    Je suis un débutant sur Excel et VBA, dans le cadre d'un stage que j'effectue en ce moment même, j'ai comme objectif de transférer des données rentrées précédemment dans un formulaire vers un tableau Excel.
    J'ai travaillé sur un tableau de façon à découvrir le langage, en essayant de réaliser quelques fonctions basiques(ce tableau me servira sûrement d'exemple par la suite, je souhaite donc le faire sans erreurs).

    Nom : 1433333884-screen1.png
Affichages : 221
Taille : 11,8 Ko

    Je n'avais encore jamais programmé en VBA, j'ai des notions de C, donc j'ai déjà une logique pour réaliser certaines choses, mais je n'arrive justement pas encore à tout faire.

    Je vous explique mon problème : je souhaite que les informations occupent une ligne par personne, il me faut donc transférer ces mêmes données dans les cellules adéquates. Au début, j'avais pensé créer une variable fixe(je ne connais plus le terme exacte), qui ne bougerait pas à la fermeture du fichier, et qui s'incrémenterait à chaque nouvel adhérent.
    Néammoins, j'ai ensuite vu que l'on pouvait trouver la première ligne vide d'un tableau facilement, grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        If IsError(Range("A1").End(xlDown).Row) Then 'Si erreur avec A1, alors la
            NLign = 2                                'première ligne vide est 2
        Else
            NLign = Range("A1").End(xlDown).Row + 1  'Sinon première ligne vide =
        End If                                       'ligne trouvée +1
    J'ai vérifié grâce à une MsgBox et le résultat est le bon.

    C'est là que je bloque : je n'arrive pas à séléctionner correctement via Range la cellule qui prendra la donnée, j'utilise ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        nom = TxtNom
        Range("A" & NLign).Value = nom
        prenom = TxtPrenom
        Range("B" & NLign).Value = TxtPrenom
        daten = TxtDate
        Range("C" & NLign).Value = TxtDate
    Comme vous pouvez le voir, j'ai ma variable "NLign" qui indique le numéro de la ligne prochaine ligne vide de disponible, c'est elle qui doit me servir pour mes coordonnées lors de l'envoie des informations vers le tableau.

    J'imagine que je n'utilise pas la bonne méthode puisque j'obtient le message "La méthode Range de l'objet _Global a échoué" , mais même en en essayant d'autres, ça revient au même(je le fais sûrement mal).

    Je précise que je me suis aidé de ce tutoriel pour réaliser mon formulaire.

    Si vous avez besoin de plus de code, du fichier ou de plus d'informations, n'hésitez pas à demander car là je bloque vraiment depuis plusieurs jours.

    Merci beaucoup, Kamec.

  2. #2
    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,

    il faudrait montrer la procédure complète, sinon impossible de savoir

    il faut prendre l'habitude d'utiliser le mode pas à pas, qui te permet de faire tourner ta procédure ligne par ligne, et ainsi de pouvoir consulter la valeur de tes variables au fur et à mesure

    ton erreur signifie, en gros au vu de ton contexte, que la Range que tu utilises n'existe pas

    ce qui me ferait pencher pour un NLign non instancié, et donc égal à 0

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 28
    Par défaut
    Rebonjour, voici la procédure complète :

    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
    45
    46
    47
    48
    49
     
    Private Sub btVal_Click() 'Validation via le bouton
        Sheets("bdd").Activate
     
        '// ON INITIALISE LES VARIABLES (1 variable : 1 colonne)
        Dim nom As String, prenom As String, sexe As String, daten As Date, NLign As Long
     
        '// ON TROUVE LA LIGNE OÙ L'ON ECRIRA (descente avec xlDown)
        If IsError(Range("A1").End(xlDown).Row) Then 'Si erreur avec A1, alors la
            NLign = 2                                'première ligne vide est 2
        Else
            NLign = Range("A1").End(xlDown).Row + 1  'Sinon première ligne vide =
        End If                                       'ligne trouvée +1
     
        '// ON (RE)MASQUE LES LABELS D'ERREUR - DE VALIDATION (en cas d'ajout de plusieurs personnes)
        If Lbl5.Visible = True Or Lbl6.Visible = True Then
            Lbl5.Visible = False
            Lbl6.Visible = False
        End If
     
        '// SI CASE VIDE : ON AFFICHE UN MESSAGE D'ERREUR
        If TxtNom = "" Or TxtPrenom = "" Or TxtDate = "" Or (OptH = False And OptF = False) Then
            Lbl5.Visible = True
        Exit Sub 'Annuler l'action
     
        '// SINON : ON AFFICHE UN MESSAGE DE VALIDATION (2s)
        Else
            Lbl6.Visible = True
            Application.Wait Now + TimeValue("00:00:02")
            Lbl6.Visible = False
        End If
     
        '// ON AFFECTE LES VALEURS DES CASES AUX CELLULES DU TABLEAU
        nom = TxtNom
        Range("A" & NLign).Value = nom
        prenom = TxtPrenom
        Range("B" & NLign).Value = TxtPrenom
        daten = TxtDate
        Range("C" & NLign).Value = TxtDate
     
        'If OptH = True Then
            'sexe = "Homme"
            'Range("D" & NLign) = sexe
       ' End If
        'If OptF = True Then
            'sexe = "Femme"
            'Range("D" & NLign) = sexe
        'End If
    End Sub
    Quant au mode pas à pas, je n'arrive pas à l'utiliser avec mon formulaire(il ne me laisse pas rentrer de valeurs dans le formulaire).
    Du coup, j'ai placé un "MsgBox NLign" devant les Range, afin de connaître sa valeur, et tu as l'air d'avoir raison puisqu'il m'affiche +108k de lignes(il me semble que c'est le maximum sur XL-2013, non?), j'étais pourtant sûr d'avoir vérifier cela, mais NLign n'a plus l'air de fonctionner.
    J'ai vu que pas mal de gens utilisaient xlUp à la place de xlDown(que j'ai utilisé), cela viendrait-il de là? Comment faire dans ce cas?

    Merci.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 28
    Par défaut
    C'est bon, j'ai finalement trouvé comment faire ! Tu avais bel et bien raison joe.levrai, cela venait de mon NLign.

    Du coup, pour ceux que ça intéresserait, car j'imagine que plus tard des gens comme moi parcourront aussi les forums pendant des heures pour trouver une solution toute bête..^^'

    Voici mon nouveau 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
    41
    42
    43
    44
    45
    46
     
    Private Sub btVal_Click() 'Validation via le bouton
        Sheets("bdd").Activate
     
        '// ON INITIALISE LES VARIABLES (1 variable : 1 colonne)
        Dim nom As String, prenom As String, sexe As String, daten As Date, NLign As Long
     
        '// ON TROUVE LA LIGNE OÙ L'ON ECRIRA (descente avec xlDown)
        NLign = Range("A" & Rows.Count).End(xlUp).Row + 1 'Ici on se base sur la colonne A
        'MsgBox NLign
     
        '// ON (RE)MASQUE LES LABELS D'ERREUR - DE VALIDATION (en cas d'ajout de plusieurs personnes)
        If Lbl5.Visible = True Or Lbl6.Visible = True Then
            Lbl5.Visible = False
            Lbl6.Visible = False
        End If
     
        '// SI CASE VIDE : ON AFFICHE UN MESSAGE D'ERREUR
        If TxtNom = "" Or TxtPrenom = "" Or TxtDate = "" Or (OptH = False And OptF = False) Then
            Lbl5.Visible = True
        Exit Sub 'Annuler l'action
     
        '// SINON : ON AFFICHE UN MESSAGE DE VALIDATION (2s)
        Else
            Lbl6.Visible = True
            Application.Wait Now + TimeValue("00:00:02")
            Lbl6.Visible = False
        End If
     
        '// ON AFFECTE LES VALEURS DES CASES AUX CELLULES DU TABLEAU
        nom = TxtNom
        Range("A" & NLign).Value = nom
        prenom = TxtPrenom
        Range("B" & NLign).Value = TxtPrenom
        daten = TxtDate
        Range("C" & NLign).Value = TxtDate
     
        If OptH = True Then
            sexe = "Homme"
            Range("D" & NLign) = sexe
        End If
        If OptF = True Then
            sexe = "Femme"
            Range("D" & NLign) = sexe
        End If
    End Sub
    J'ai changé la partie qui définissait mon NLign précédemment et je l'ai remplacée par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLign = Range("A" & Rows.Count).End(xlUp).Row + 1 'Ici on se base sur la colonne A
    À noter qu'ici je me base sur ma colonne A, mais étant donné que j'ai fait en sorte d'obliger à remplir tous les critères du formulaire, cela ne pose pas de problèmes.

    Bonne journée et merci d'avoir répondu, sûrement à plus tard puisque mon travail n'est pas encore terminé !

    EDIT : Je ne sais pas comment rajouter la balise "[Résolu]" devant le message, si un modérateur/administrateur voulait bien s'en charger, merci!

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    C'est rare que je pose des questions, mais, en principe, tu as un lien hypertexte en bas de la question. (Marquer comme résolu, ou quelque chose du genre.)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 28
    Par défaut
    Ah oui en effet, je n'avais pas vu, merci!

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/11/2008, 09h37
  2. Réponses: 1
    Dernier message: 12/03/2008, 06h17
  3. Envoyer des données d'une formulaire vers une BD dès le chargement d'une page
    Par rebhihabib dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 11/03/2008, 01h33
  4. Réponses: 1
    Dernier message: 10/03/2008, 12h56
  5. Envoyer des données d'une formulaire vers une BD dès le chargement d'une page
    Par rebhihabib dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 09/03/2008, 23h03

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