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 :

afficher la valeur d'une cellule dans un user form , la modifier en "live " et remplacer celle existante [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut afficher la valeur d'une cellule dans un user form , la modifier en "live " et remplacer celle existante
    Bonjour

    je precises sous VBA excel 2007

    j'ai une macro à developper via un fichier classique , je dois compter le nombre de caracteres dans une cellule , ( ça c'est bon ) , ensuite si le nbre de caracteres est > 20 , j'affiche le contenu de la cellule via un user form , et je modifie le texte dans le user form pour qu'il soit < ou = à 20 , le resultat du texte modifie doit remplacer le texte original via un bouton "VALIDER "

    Mon probleme est que le user form s'affiche tres bien , mais je n'ai aucune valeur dans le textbox 1 et text box2 , et lorsque j''appuie sur "VALIDER", je passes directement à la derniere ligne contenant plus de 20 caracteres!

    Merci de votre aide

    Hottis

  2. #2
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    Pour que l'on puisse corriger ton code, il faudrait au minimum nous le montrer.
    Peux-tu nous en mettre un extrait ?

    Bertrand

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Bonsoir voici le fichier

    il y a beaucoup d'enregistreur et quelques bidouilles

    Merci

    Hottis
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bon, bon,

    Il y a un peu de boulot pour comprendre comment tu articules tout cela (en plus, il y a des renvois à des fichiers Excel présents sur ton disque dur). Donc en conséquence, je vais consacrer mon énergie juste sur le formulaire (Userform en anglais). Cela ne veut pas dire que le reste est parfait - mais si ça fonctionne chez toi, c'est déjà bien.

    Au premier chargement du formulaire, il peut y avoir une initialisation de tes données (= les valeurs à l'origine/à l'ouverture).
    Tu as effectivement une macro d'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_InitiaLize()
    UserForm.TextBox1.Value = Sheets("source").Cells(I, 7).Value
    UserForm.TextBox2.Value = Sheets("source").Cells(I, 9).Value
    End Sub
    Un truc m'interpelle : I correspond à quoi ? A priori, c'est une variable mais rien ne la définit et ne l'initialise (ce n'est pas non plus une variable globale pour ceux qui se poseraient la question).
    Donc je proposerai le correctif suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_InitiaLize()
    ' je déclare la variable I comme un chiffre entier
    Dim I as integer
    ' j'initialise I en lui affectant la valeur 5
    I = 5
    ' dans ma Textbox1, j'affecte la valeur de la cellule G5 de la feuille "source"
    UserForm.TextBox1.Value = Sheets("source").Cells(I, 7).Value
    ' dans ma Textbox2, j'affecte la valeur de la cellule I5 de la feuille "source"
    UserForm.TextBox2.Value = Sheets("source").Cells(I, 9).Value
    End Sub
    Au passage, plutôt que d'utiliser inutilement une variable, il eut été préférable d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_InitiaLize()
    ' dans ma Textbox1, j'affecte la valeur de la cellule G5 de la feuille "source"
    UserForm.TextBox1.Value = Sheets("source").Cells(5, 7).Value
    ' dans ma Textbox2, j'affecte la valeur de la cellule I5 de la feuille "source"
    UserForm.TextBox2.Value = Sheets("source").Cells(5, 9).Value
    End Sub
    Voilà pour la première partie.

    Bertrand

    Seconde partie : la macro déclenchée par le bouton "Valider" du formulaire

    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
    Private Sub CommandButton1_Click()
     
    Dim I As Integer
     
    For I = 5 To 5000
     
        If Cells(I, 8).Value > 20 Then
     
    UserForm.TextBox1.Value = Sheets("Source").Cells(I, 7).Value
    UserForm.TextBox2.Value = Sheets("Source").Cells(I, 9).Value
     
    'Sheets("source").Cells(I, 7).Select
    Sheets("Source").Cells(I, 7).Value = UserForm.TextBox1.Value
     
     
        End If
     
    Next I
     
     
     
     
     
    'UserForm1.TextBox1.Value = Sheets("Source").Cells(I, 7).Value
    'UserForm1.TextBox2.Value = Sheets("Source").Cells(I, 9).Value
    'Range("A1").Value = Val(TextBox1.Text)
     
    'Value(TextBox1.Text) = Sheets("Source").Cells(I, 7).Value
    'Value(TextBox2.Text) = Sheets("Source").Cells(I, 9).Value
     
    'Sheets("source").Cells(I, 7).Select
     
    'UserForm1.newsearch_value
     
    'Sheets("Source").Cells(I, 7).Value = Me.TextBox1
     
        ' Sheets("source").Cells(I, 7).Select
        'Txtnom = Cells(I, 7)
       ' NEWVAL = InputBox("NBRE DE CARACTERES >20" & Cells(I, 9).Value  SAISIR LE NOUVEAU REPERE TOPO")
     
        'Cells(I, 7).Value = NEWVAl
     
    'Unload UserForm1
     
    End Sub
    Là encore, j'avoue être surpris par le coté étrange de ce code. Je ne serai pas dire si c'est un problème de logique ou de compréhension...

    Une question avant d'aller plus loin :
    Veux tu déclencher le formulaire lorsque Cells(I, 8).Value a une valeur supérieur au chiffre 20 ? (ce qui a l'air d'être la cas dans ton code)
    Ou veux tu déclencher le formulaire lorsque Cells(I, 8).Value contient un mot de plus de 20 caractères ? (ce qui a l'air d'être la cas dans ton post)

    Bertrand

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Bonjour

    je part du fichier "capture .jpg"

    pour chaque cellule de la colonne G , je vérifie que le nbre de caracteres n'est pas >20 , si c'est le cas le userform1 doit s'afficher ,avec dans le textbox1 "SAISIR LE NOUVEAU CODE DU REPERE TOPO" le contenu de la cellule Gxx et dans le text box2 "NBRE CARACTERES EN TROP" le contenu de la cellule Ixx .

    Je modifie le contenu du text box1 , exemple , pour la cellule G6, le texte qui doit apparaitre dans le userform1 doit etre R30-12345647891012131415, je sais qu'il y a 4 caracteres en trop , je le modifie en R30-1234564789101213.

    En appuyant sur le commandbutton "VALIDER" , cette nouvelle valeur doit remplacer R30-12345647891012131415.

    J'effectue cette operation pour toutes les cellule de la colonne G dont le nbre de caracteres est>20 carateres.

    Cordialement

    Hottis
    Images attachées Images attachées   

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Rebonjour

    j'avais fait ça qui fonctionnes tres bien , le seul pb c'est qu'il faut retaper tous le texte moins les caracteres en trop , il y a donc un risque de mauvaise saisie sur une longue chaine de caracteres.

    C'est pour cela que via un userform , je penses pouvoir supprimer uniquement les caracteres en trop.

    Cordialement

    Hottis.


    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
    Dim I As Integer
     
    For I = 5 To 5000
     
        If Cells(I, 8).Value > 20 Then
     
        Sheets("source").Cells(I, 7).Select
     
        NEWVAL = InputBox("NBRE DE CARACTERES >20" & "( " & Cells(I, 9).Value & " )" & "SAISIR LE NOUVEAU REPERE TOPO")
     
        Cells(I, 7).Value = NEWVAL
     
     
        End If
     
    Next I

  7. #7
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    Il y a une commande qui permet de sélectionner les 20 premiers caractères en partant de la gauche et ce, sans avoir à modifier manuellement ton texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").value = Left(Range("A1").value, 20)
    ça serait bien plus simple, ne crois tu pas ?

    Bertrand

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Oui c'est vrai

    mais ce ne sera pas forcement tout le temps comme cela , en effet dans certains cas , ce ne sera pas necessairement les derniers caracteres à supprimer.

  9. #9
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Dans quel cas "ce ne sera pas necessairement les derniers caracteres à supprimer" ?

    Bertrand

  10. #10
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    par exemple pour for_raidisseurGauche_2, deviendra for_raidGauche_2
    autre exemple for_ETI_LOGO_FACEAVANT deviendra ETI_LOGO_FACEAVANT

  11. #11
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    D'accord - tu as raison : le changement manuel est bien nécessaire.

    Si tu veux procéder de la sorte, il te faut déjà remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(I, 8).Value > 20 Then
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' len mesure la longueur d'une chaîne de caractères
    If len(Cells(I, 8).Value) > 20 Then
    ensuite, juste avant ton "end if", insères un

    Testes avec ce changement et dis moi si cela te convient mieux.

    Bertrand

  12. #12
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Bonjour

    c'est bon j'ai résolu mon pb , en fait la variable I utilisé dans le module n'était plus reconnu ( et donc toujours à 0 ) lors de l'utilisation du user name et du command button.

    J'ai bricole un truc pour que ça fonctionne , bon apres c'est sur que ce n'est peut etre pas tres accadémique mais cela fonctionne.

    Merci du coup de main

    Hottis

    voilà les codes

    dans le module 1 :

    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
    Dim I As Integer
    Dim K As Integer
     
    For K = 1 To 5
     
    For I = 5 To 5000
     
    If Cells(I, 8).Value > 20 Then
    T = Cells(I, 8).Row
    Range("X64002") = T
    T = Range("x64002")
    UserForm1.TextBox1 = Sheets("SOURCE").Cells(I, 7).Value
    UserForm1.TextBox2 = Sheets("SOURCE").Cells(I, 9).Value
     
    UserForm1.Show
     
    End If
     
    Next I
     
    Next K
    dans le user form et button click :

    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
    Private Sub CommandButton1_Click()
     
    T = Sheets("Source").Cells(64002, 24).Value
    newval = UserForm1.TextBox1.Object
     
    Sheets("Source").Cells(T, 7).Value = newval
    UserForm1.Hide
    End Sub
     
    Private Sub TextBox1_Change()
     
    End Sub
     
    Private Sub TextBox2_Change()
     
    End Sub
     
     
    Private Sub UserForm_InitiaLize()
     
    T = Sheets("Source").Cells(64002, 24).Value
     
    UserForm1.TextBox1 = Sheets("SOURCE").Cells(T, 7).Value
    UserForm1.TextBox2 = Sheets("SOURCE").Cells(T, 9).Value
     
    End Sub

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

Discussions similaires

  1. [XL-2007] Afficher la valeur d'une cellule dans un textbox
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2015, 12h04
  2. [XL-2007] Afficher la valeur d'une cellule dans un TextBox
    Par Marion3 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/08/2014, 10h53
  3. Réponses: 1
    Dernier message: 10/04/2014, 07h22
  4. Réponses: 1
    Dernier message: 10/04/2014, 07h17
  5. [XL-2007] Comment afficher la valeur d'une cellule dans un textbox
    Par alexworks dans le forum Excel
    Réponses: 2
    Dernier message: 24/09/2013, 11h46

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