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 :

Saisie à partir de userform


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Saisie à partir de userform
    Bonjour,

    Je tiens à préciser tout d'abord que je suis novice en vba.
    Il est sans doute vrai que le titre de mon post n'est pas très explicite, mais je ne savais pas trop comment exprimer mon pb. Voici mon soucis de manière plus détaillé et clair :

    A partir d'un userform de saisie, je remplis des lignes d'un tableau excel. Chaque ligne est identifié par un N° et comporte plusieurs champs. Ensuite j'effectue une deuxième saisie de plusieurs champs supplémentaires en complétant mes lignes à partir du N° comme identifiant. Dans mon userform je saisie le n° souhaité dans un textbox puis dans deux autres textbox les info complémentaires et enfin je valide cette saisie par un bouton de commande.
    Mais je souhaite introduire dans ma macro un msg qui averti l'utilisateur lorsqu'il a saisie un n° erroné .
    Voici le code de ma macro du bouton de commande :

    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 CommandButton1_Click()
    Sheets("feuil1").Activate
    n = 9
     
    Do While Cells(n, 3) <> ""  'c'est la boucle que j'utilise pour  chercher le n° correspondant dans ma liste (ici la colonne 3)
    If Cells(n, 3) = TextBox7.Value Then  
    Cells(n, 16).Value = TextBox8   'saisie des champs complémentaires
    Cells(n, 17).Value = TextBox9
    End If
    n = n + 1
    Loop
     
    If TextBox7.Value <> Cells(n, 3) Then   'j'introduis une nouvelle condition pour qu'il indique ce msg dès que la valeur saisie colle pas à ma liste
    MsgBox ("ce n°retour n'existe pas")       
    End If
     
    Unload UserForm2
    ActiveWorkbook.save
    End sub
    Voila comment réagi ma macro : lorsque je saisie un n° erroné, il m'indique le msg et puis ferme l'userform, mais lorsque que je saisie un n° existant, cela complète bien les champs de la ligne correspondante, mais affiche quand même le msg d'erreur.
    Je sens que mon pb doit pas être bien compliqué, mais j'ai essayé de modifié et testé ma macro , mais sans jamais obtenir le résultat escompté!!

    J'ai juste besoin d'un pti coup de !!!!
    Est-ce que quelqu'un pourrait m'aider (en espérant que l'explication soit compéhensible) ? merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonsoir

    en faisant simple je pense qu'il faudrait modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If TextBox7.Value <> Cells(n, 3) Then                      'j'introduis une nouvelle condition pour qu'il indique ce msg dès que la valeur saisie colle pas à ma liste
    MsgBox ("ce n°retour n'existe pas")       
    End If
    comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Cells(n, 3) = "" Then                      'j'introduis une nouvelle condition pour qu'il indique ce msg dès que la valeur saisie colle pas à ma liste
    MsgBox ("ce n°retour n'existe pas")       
    End If
    Car si ton numéro n'a pas été trouvé ta boucle while sort quand tu as une cellule vide.
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut


    Je vais essayer de traduire ce qu'il se passe.
    Supposons une boucle de 1 à 10
    n prend donc la valeur n = 1, n = 2, n = 3, ....., n = 10
    Dans ta TextBox tu introduits "toto" et la cellule (5, 3) contient "toto"
    Donc lorsque n sera égale à 5 --> cells(n, 3) = cells(5, 3) --> il exécutera la saisie des champs complémentaires
    Ensuite la boucle continuera jusque n = 10

    Ce qui fait que lorsque, à la suite de ta boucle, tu vérifies si la valeur de ta TextBox est différente de Cells(n, 3), elle le sera vu que Cells(n, 3) = Cells(10, 3)

    Je ne sais pas si je suis très clair mais il est tard

    En résumé, essaye ceci
    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
    Private Sub CommandButton1_Click()
    Dim Result As Boolean, n As Integer '<-- ne pas oublier de déclarer tes variables
     
    'Sheets("feuil1").Activate '<-- on peut éviter de sélectionner la feuille
    'en faisant comme ceci With Sheets("Feuil1")
    'et en ajoutant un point à Cells --> .Cells(x, y)
     
    n = 9
    Result = False
     
    With Sheets("Feuil1")
        Do While .Cells(n, 3) <> "" 'c'est la boucle que j'utilise pour chercher le n° correspondant dans ma liste (ici la colonne 3)
            If .Cells(n, 3) = TextBox7.Value Then
                .Cells(n, 16).Value = TextBox8 'saisie des champs complémentaires
                .Cells(n, 17).Value = TextBox9
                Result = True
            End If
        n = n + 1
        Loop
    End With
     
    If Result = False Then 'j'introduis une nouvelle condition pour qu'il indique ce msg dès que la valeur saisie colle pas à ma liste
    MsgBox "ce n° retour n'existe pas" '<-- pas besoin de parenthèses
    End If
     
    Unload UserForm2
    ActiveWorkbook.Save
    End Sub
    EDIT : 2ème x grillé par zyhack
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par fring Voir le message
    EDIT : 2ème x grillé par zyhack
    bonjour Fring

    désolé de te contredire, mais comme tu l'as dit il été tard.

    J'y est repensé en couchant et je me suis aperçu que j'avais écris une bêtise car dans tous les cas en fin de la boucle la cellule aura une valeur = "" donc le problème n'était pas résolu, je voulais modifier mon message de bon heure ce matin pour en arriver à la même solution que toi donc

    Encore une fois je suis grillé par Fring
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé ta macro, et cela marche parfaitement!!! merci fring!!!!
    Merci pour la solution, et ton explication (t'inquiète pas j'ai tous compris!!). C'est encore mieux de comprendre ces erreurs et d'apprendre de nouvelle choses!

    Merci à toi aussi zyhack pour ta contribution!!

    A++++

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2009, 23h23
  2. Empecher saisie à partir d'une date.
    Par Clem74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/04/2008, 18h29
  3. Saisie via un userform
    Par claribuff dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/03/2008, 18h34
  4. [CKEditor] Insérer dans ma base, les données saisies à partir de FCKeditor
    Par remo dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 16/05/2007, 10h44
  5. Réponses: 7
    Dernier message: 21/02/2006, 11h42

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