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 :

Problème avec selection cellule grâce au formulaire [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Problème avec selection cellule grâce au formulaire
    Bonjour messieurs,

    Dans le cadre du développement d'un programme Excel, je me e
    retrouve face à une erreur que je n'arrive pas à résoudre :

    J'ai le bout de programme suivant qui me permets d'afficher dans une textbox la valeur de la colonne J de la selectione effectuée dans ma combobox

    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
     
    Private Sub ForComboBox_Click()
     
     
         With Worksheets("Feuil1")
     
            '"Range(ComboBox1.RowSource).Row" permet de connaître le numéro de la 1 ère ligne
            'du RowSource afin d'effectuer le décalage par rapport à ListIndex
            TextBox1.Text = .Cells(ForComboBox.ListIndex + Range(ForComboBox.RowSource).Row, 10).Value
     
        End With
     
     
        With ForComboBox
     
            .Text = .Column(0, .ListIndex) & "                                      " & .Column(1, .ListIndex)
     
        End With
     
    End Sub

    Je souhaite maintenant remplacer la valeur présente dans la cellule J selectionné ci dessus par la valeur de ma textbox 2, pour cela j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(ForComboBox.ListIndex + Range(ForComboBox.RowSource).Row, 10).Value = CDbl(Me.TextBox2)
    Le problème est qu'il m'incrémente bien la valeur de ma textbox2 dans la bonne colonne mais toujours en J1 (et non pas dans la bonne ligne selectionnée à l'aide de ma combobox)

    Pouvez vous m'expliquer pourquoi ?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Salut.

    A priori, ton code est correct. Pourrais-tu montrer le contexte dans lequel tu l'utilises?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Je vous fourni le fichier avec le USERFORM à l'intérieur pour une meilleur interprétation

    Merci du temps passé sur ce problème

    Cordialement
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je crois qu'il sera préférable de travailler avec une variable globale qui permet de mémoriser la ligne à modifier.

    Exemple (l'ensemble de ton module de ton 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
    Option Explicit
    'MaLigne: Variable dans laquelle on mémorise la ligne à modifier
    Dim MaLigne As Long
     
    Private Sub UserForm_Initialize()
    Dim LastLig As Long
     
    With Worksheets("Feuil1")
        'Dernière ligne remplie de la colonne C
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        Me.ForComboBox.RowSource = "'" & .Name & "'!C2:D" & LastLig
    End With
    With Me.SpinButton1
        .Min = 0
        .Max = 100
        .Value = 0
    End With
    End Sub
     
    Private Sub ForComboBox_Click()
     
    With Worksheets("Feuil1")
        'Maligne=2+ l'index de l'item choisi, l'index du premier item est 0
        MaLigne = 2 + Me.ForComboBox.ListIndex
        TextBox1.Text = .Cells(MaLigne, 10).Value
    End With
     
    With ForComboBox
        .Text = .Column(0, .ListIndex) & Space(40) & .Column(1, .ListIndex)
    End With
    End Sub
     
    Private Sub SpinButton1_Change()
     
    Me.TextBox2.Value = Me.SpinButton1.Value
    End Sub
     
    Private Sub CommandButton1_Click()
     
    If MaLigne > 0 Then Worksheets("Feuil1").Range("J" & MaLigne).Value = Val(Me.TextBox2.Value)
    MaLigne = 0
    End Sub
     
    Private Sub CommandButton2_Click()
     
    MaLigne = 0
    Unload Me
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
    If CloseMode = 0 Then Cancel = True
    End Sub

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Ton souci vient de la procédure Private Sub ForComboBox_Click() qui modifie la propriété ListIndex.

    Il y a plusieurs solutions, dont la plus simple me semble consister en ceci:
    • ajouter les colonnes supplémentaires dans la source du combo, pour avoir huit colonnes (et donc celle contenant la quantité en stock en colonne d'indice 7) ;
    • récupérer la valeur de cette colonne du combo lors du click pour la placer dans le textbox.


    Il faut donc changer la ligne dans la procédure d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ForComboBox.RowSource = Range(.Cells, .End(xlDown)(1, 8)).Address(External:=True)
    La procédure sur clic doit être modifiée, et devient en fait beaucoup plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ForComboBox_Click()
    TextBox1 = ForComboBox.Column(7)
    End Sub
    L'idée d'essayer d'ajouter la colonne code interne dans la combo lors de la sélection est mauvaise, à mon avis. Il serait préférable d'ajouter le code interne dans un textbox à part, à l'instar de la quantité disponible. Cela évite de jouer avec des variables globales et de modifier les index du combobox.

    [EDIT]
    En plus, si tu travaillais avec une plage nommée utilisant la fonction DECALER ou avec une liste XL2003 renommée ou un tableau XL2007/2010, tu n'aurais pas besoin de redimensionner lors de l'initialisation. [/EDIT]

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Tout d'abord merci pour ton aide et tes explications

    Cependant, en effectuant les modifications que tu m'as dites, je n'ai pas résolu mon problème de renseignement de la case sélectionnée à l'aide de ma combobox (mon souci est le même qu'auparavant : dès que je valide, le programme me renseigne la première case de la colonne J=> Qui s'avere être la bonne colonne mais jamais la bonne ligne)

    J'ai essayé de remplacer la ligne de commande pour remplir la cellule en question par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ForComboBox.Column(7).Value = CDbl(Me.TextBox2)
    mais cette fois ci il y a un problème de programmation.

    Savez vous comment procéder ?

    Merci par avance

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu devrais essayer le code de mercatog.

    Cordialement.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Tu devrais surtout essayer le code que l'on te donne...

    Suis exactement la procédure que j'ai décrite dans mon message précédent, au lieu de tester un code que je n'ai pas donné, et ta case sera renseignée de façon correcte.

    Voir le fichier

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

Discussions similaires

  1. [XL-2007] Problème avec Selection cellule dernière colonne
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/04/2013, 13h17
  2. Problème avec Select dans le formulaire
    Par jejefm dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2007, 10h34
  3. Problème avec select sous MYSQL
    Par Thomad dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/01/2006, 12h26
  4. problème avec select sur onchange
    Par Kerod dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2005, 15h05
  5. Problème avec select top
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 10/12/2004, 15h55

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