Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2011, 12h18   #1
Invité régulier
 
Inscription : décembre 2010
Messages : 32
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 32
Points : 7
Points : 7
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 :
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 :
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
jerem1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 14h46   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

A priori, ton code est correct. Pourrais-tu montrer le contexte dans lequel tu l'utilises?
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 14h57   #3
Invité régulier
 
Inscription : décembre 2010
Messages : 32
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 32
Points : 7
Points : 7
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
Type de fichier : xls Base de donnees_Excel__essai.xls (55,5 Ko, 6 affichages)
jerem1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 15h37   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
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 :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/09/2011, 15h41   #5
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
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 :
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 :
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]
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/09/2011, 16h17   #6
Invité régulier
 
Inscription : décembre 2010
Messages : 32
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 32
Points : 7
Points : 7
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 :
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
jerem1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 16h58   #7
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

Tu devrais essayer le code de mercatog.

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 11/09/2011, 18h17   #8
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
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
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h40.


 
 
 
 
Partenaires

Hébergement Web