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 :

modifier les infos dans les zones de texte


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut modifier les infos dans les zones de texte
    Par contre je suis confronté à un autre problème : Dans un UserForm, j'ai une zone de liste modifiable qui reprend tous les noms de mon tableau et lorsque j'en sélectionne un, il me renseigne plusieurs zones de texte. J'aimerai pouvoir modifier les infos dans les zones de textes pour que la ligne du tableau soit modifiée. Je n'arrive pas à faire le lien entre le contenu des zones de texte, la zone de liste modifiable et les cellules...

    Voilà le code de la liste modifiable :

    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
    Private Sub MaListe_Change()
     
    On Error GoTo fin
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        TBNom = MaListe.List(x, 0)
        TBCode = MaListe.List(x, 1)
        TBNomDomaine = MaListe.List(x, 2)
     
     
    fin:
     
    End Sub

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Je propose
    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 ligne As Long
     
    Private Sub ComboBox1_Change()
     
      nom = ComboBox1.Column(1)
      prenom = ComboBox1.Column(2)
      code = ComboBox1.Column(0)
     
      Set c = Feuil1.Range("A1:C14").Find(code, LookIn:=xlValues)
      If Not c Is Nothing Then ligne = c.Row Else ligne = 0
     
    End Sub
     
    Private Sub nom_Change()
     If ligne > 0 Then Feuil1.Cells(ligne, 2) = nom
    End Sub
     
    Private Sub prenom_Change()
      If ligne > 0 Then Feuil1.Cells(ligne, 3) = prenom
    End Sub
    La liste s'appelle ComboBox1 et les zônes de texte : nom, prenom et code
    Lors de la sélection, on récupère la ligne du tableau concernée par le choix
    lors de la modification du nom ou du prenom, il suffit d'écrire les nouvelle donnée sur la ligne du tableau

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour helas,

    Je ne comprends pas tout dans ton code, je vais donc expliquer le contenu du User Form et les actions que je souhaite faire :

    Je possède une liste de données qui reprend un Nom, un Code et un Nom de Domaine. Un UF me permet de consulter ces 3 infos à partir de la saisie d'un nom issu d'une combobox.
    Ce que j'aimerai faire c'est que lorsque je clique sur le bouton "modifier" de mon UF, les informations modifiées directement dans les text box puissent aller mettre à jour les infos de mon tableau.
    J'arrive à faire afficher mes infos selon le choix dans la liste box mais dans l'autre sens à les modifier dans le tableau je n'y arrive pas...

    Voici le code que j'utilise :

    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
    Private Sub ButModif_Click()
     
    On Error GoTo fin
     
    Dim x As Integer
     
        x = MaListe.ListIndex
     
     
        Cells(x, 0) = TBNom
        Cells(x, 1) = TBCode
        Cells(x, 2) = TBNomDomaine
     
    fin:
     
    End Sub
    Merci pour ton aide !

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    C'est le problème quand on mets en place un gestionnaire d'erreurs avant de faire toute une batterie de tests !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(x, 0) = TBNom
    Il n'existe pas de colonne 0 donc erreur !

    Hervé.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour Hervé,

    Merci de ta réponse, mon code fonctionne. Cependant les informations reprises dans les text box ne sont pas liées aux cellules que la combo box renseigne. Du coup la modification ne se fait pas aux cellules correspondantes, je n'arrive pas à lier les bonnes cellules dans le code...

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Patafoin Voir le message
    Bonjour Hervé,

    Merci de ta réponse, mon code fonctionne....
    quel code ...? le code que tu as posté comporte une erreur signalée par These ...

    ensuite comme le dit These "On Error..." est à éviter par les débutants...supprime la ligne ..

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Pardon pour la maladresse de mon expression, le code modifié grâce à Theze fonctionne.
    Pardon d'être novice, d'où les gestionnaires d'erreurs, je vais essayer de faire sans.

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Pardon d'être novice, d'où les gestionnaires d'erreurs, je vais essayer de faire sans
    Un gestionnaire d'erreur est souvent obligatoire mais on l'installe généralement après avoir fait une multitude de tests afin de détecter les failles du code et de rectifier le cas échéant.
    Une chose à mon sens impératif, c'est la déclaration des variables obligatoire, ça permet souvent de garder quelques cheveux sur la tête ! Outils-->Options-->Onglet "Editeur"-->Cocher "Déclaration des variables obligatoire" ceci, après avoir fermé et ré-ouvert Excel, ajoutera automatiquement "Option Explicit" à chaque module créé.
    Ceci dit, une chose qui, est à mon sens, est important, c'est de "parenter" les objets c'est à dire qu'une plage de cellules être précédées de son parent donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("Feuil1").Cells(x, 1) = TBCode
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(x, 1) = TBCode
    car le fait de penser que c'est à cette cellule que l'on veut attribuer la valeur du TextBox ne va pas faire en sorte que le compilateur va faire ceci (il n'est pas télépathe) et il va prendre par défaut la feuille active il en va de même si plus d'un classeur est ouvert.
    Dans le code ci-dessous (tiré du code que tu as posté plus haut) :
    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
     
    Sub Test()
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        With Worksheets("Feuil1")
     
            .Cells(x, 1) = TBNom
            .Cells(x, 2) = TBCode
            .Cells(x, 3) = TBNomDomaine
     
        End With
     
    End Sub
    si tu souhaites que les valeurs soient entrées dans des cellules autres que la ligne correspondant à l'index de la ComboBox, il te faut savoir de combien tu souhaites décaler :
    Là, le décalage sera de 3 lignes plus bas par rapport à la valeur de l'index :
    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
     
    Sub Test()
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        x = x + 3
     
        With Worksheets("Feuil1")
     
            .Cells(x, 1) = TBNom
            .Cells(x, 2) = TBCode
            .Cells(x, 3) = TBNomDomaine
     
        End With
     
    End Sub
    Hervé.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour Hervé,

    Merci beaucoup pour les explications, c'est déjà plus clair dans mon esprit !
    J'ai mis le décalage correspondant à la ligne que je veux modifier, cependant une seule des 3 infos modifiées dans les 3 TextBox se reporte dans les cellules. Quand je change la TBNom, une fois que je clique la modification se fait dans la cellule. Par contre si je modifie les TBCode et TBNomDomaine, une fois que je clique ce sont les infos des cellules qui reviennent dans les TB, du coup la modification ne se fait pas... Faut-il que je créée une autre variable ?

    Je précise que que la TBNom fait référence à une cellule de la 1ère colonne, la TBCode à une cellule de la 2ème colonne et la TBNomDomaine à une cellule de la 3ème colonne.

    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
    Private Sub ButModif_Click()
     
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        x = x + 9
     
        With Worksheets("Base")
     
            .Cells(x, 1) = TBNom
            .Cells(x, 2) = TBCode
            .Cells(x, 3) = TBNomDomaine
     
        End With
     
    End Sub

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Il faudrait que tu poste tout le code qui se trouve dans le module de ta Form car il n'y a pas de raison pour que les autres valeurs ne soient pas inscrites dans les cellules voisines. Il se peut qu'un évènement modifie les valeurs juste avant le clic sur le bouton (du genre "Exit" ou autres) !
    Si tu ne fais aucune sélection dans ta ComboBox, les valeurs doivent au moins être inscrites dans la ligne 8 (aucune sélection, Index = -1).

    Hervé.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Voici le code de mon UserForm :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Private Sub ButFermer_Click()
     
        UFGestMulti.Hide
        TBNom = Clear
        TBCode = Clear
        TBNomDomaine = Clear
        MaListe = Clear
     
     
    End Sub
     
    Private Sub ButModif_Click()
     
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        x = x + 9
     
        With Worksheets("Base")
     
            .Cells(x, 1) = TBNom
            .Cells(x, 2) = TBCode
            .Cells(x, 3) = TBNomDomaine
     
        End With
     
    End Sub
     
    Private Sub ButSup_Click()
     
     
        Dim x As Integer
     
        rep = MsgBox("Etes-vous sur de vouloir supprimer ce multiplicateur ?", vbYesNo + vbQuestion)
     
        If rep = 6 Then
     
        x = MaListe.ListIndex
        Application.Goto reference:="TabMulti"
        Selection.ListObject.ListRows(x + 1).Delete
        MaListe.RowSource = "TabMulti"
     
     
        End If
     
        UFGestMulti.Hide
     
     
    End Sub
     
    Private Sub ButClear_Click()
     
     
        TBNom = Clear
        TBCode = Clear
        TBNomDomaine = Clear
        MaListe = Clear
     
     
    End Sub
     
    Private Sub MaListe_Change()
     
     
        Dim x As Integer
     
        x = MaListe.ListIndex
     
        TBNom = MaListe.List(x, 0)
        TBCode = MaListe.List(x, 1)
        TBNomDomaine = MaListe.List(x, 2)
     
     
    End Sub

    Peut être est-ce un paramètre à modifier dans la ComboBox ?

  12. #12
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    C'est bien ce que je soupçonnais, la proc évènementielle "Change" du ComboBox est exécutée juste après la modif de la première cellule car il y a modification de RowSource. Il ne te faut plus utiliser RowSource pour alimenter ta ComboBox mais AddItem dans Initialize de la Form :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim I As Integer
     
        With Worksheets("Base")
     
            For I = 1 To .Range("TabMulti").Rows.Count
     
                MaListe.AddItem .Cells(I + 8, 1)
                MaListe.Column(1, I - 1) = .Cells(I + 8, 2)
                MaListe.Column(2, I - 1) = .Cells(I + 8, 3)
     
            Next I
     
        End With
     
    End Sub
    Hervé.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour Hervé,

    Merci beaucoup de ton aide, l'ajout de ton code et la suppression de la RowSource font que le UserForm fonctionne comme je le souhaite !

    Merci pour ton aide !

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

Discussions similaires

  1. enlever les slashes devant les apostrophes dans les mails
    Par laurentSc dans le forum Langage
    Réponses: 10
    Dernier message: 16/11/2010, 18h57
  2. Réponses: 3
    Dernier message: 06/08/2009, 17h09
  3. les classes et les templates dans les plugins
    Par asoka13 dans le forum C++
    Réponses: 22
    Dernier message: 24/01/2008, 17h11
  4. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  5. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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