Pb pour prendre en consideration une ligne

Fermé
I<a55I<e77 Messages postés 2 Date d'inscription mercredi 19 mars 2014 Statut Membre Dernière intervention 20 mars 2014 - Modifié par pijaku le 28/03/2014 à 07:49
 I<a55I<e77 - 27 mars 2014 à 18:50
Bonjour,
je débute sous VBA et je me confronte à un probleme:
je voudrai réussir à inscrire dans une cellule une valeur d'une listbox en fonction de la cellule précemment sélectionnée. Je m'explique;
je double clic sur une cellule un userforme s'ouvre, je rempli des infos, elles se compilent dans une liste box et ( c'est là le pb) en validant, je veux que ctte listbox s'inscrive dans la cellule deux collonnes plus loin mais sur la même ligne.
j'ai essayé ça :

Private Sub Valid_Click()
Dim k As Integer
k = ActiveCell.Row


Range("Changement_de_spectacle!E & k") = resultat2.Value

 If Sp2 = "" Then Message.Show

Unload transfert
Q3.Show


End Sub


mais ça ne fonctionne pas est-ce que quelqu'un peut m'aider ?
merci


A voir également:

7 réponses

commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
19 mars 2014 à 16:37
Bonjour,

Si j'ai bien compris, tu veux que le résultat soit sur les cellules E et K de la même ligne.
Dans ton code, tu sauvegardes le numéro de la ligne, mais il y a une erreur de syntaxe sur la commande qui l'utilise.
Je te suggère cette correction :
    k = ActiveCell.Row
range("Changement_de_spectacle!E" & k) = resultat2.Value

Amicalement,
0
merci d'avoir répondu,

mais ton analyse n'est pas bonne, je veux inscrire le résultat dans la colonne E et sur la ligne N° (k) - k étant la valeur de Activecell.row

de plus, j'ai essayé cette syntaxe, ça ne marche pas!

je ne sais comment faire, sûrement qu'il existe quelque chose de très simple mais je ne vois pas !

De l'aide !
merci
0
I&lt;a55I&lt;e77 Messages postés 2 Date d'inscription mercredi 19 mars 2014 Statut Membre Dernière intervention 20 mars 2014
20 mars 2014 à 13:50
bonjour,
ni .value , ni .value2 ne fonctionne! En même temps je suis sous vba 2003, alors peut être que tout ne fonctionne pas !
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
20 mars 2014 à 14:32
Dans ce cas, si vous me donnez une copie de votre fichier, on pourra bien bricoler quelque chose.
(Ce site ... te permettra de déposer un fichier)
0
I&lt;a55I&lt;e77
25 mars 2014 à 19:30
http://cjoint.com/?DCztCS8Frbc

ci dessus le lien pour le fichier
bon travail, si tu peux me sortir de là !
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
25 mars 2014 à 20:35
Bonjour,

Le problème n'est pas dans le membre de gauche, mais dans celui de droite.
Il y avait une erreur de syntaxe. Il faut écrire :
Range("Changement_de_spectacle!E" & k).Value = resultat2.Value
resultat2.Value n'est égale à une valeur non nulle que si l'élément est sélectionné dans la liste. Je me demande pourquoi vous n'avez pas utilisé un simple TextBox pour cela.
Dans tous les cas, il faut forcer la sélection du dernier élément de la liste dans le bouton qui écrit le texte ( Private Sub Assemblage_Click() )
resultat2.AddItem str_ass
resultat2.ListIndex = resultat2.ListCount - 1

Je vous conseille de passer ce genre de valeurs par des variables globales plutôt que par les valeurs des objets. Je préfère définir une variable dans le module de la fenêtre concernée (transfert). Dans le code, au moment où vous remplissez votre liste, mettez ce que vous voulez afficher sur le formulaire dans cette variable.
ma_variable_globale = str_ass
resultat2.AddItem str_ass

Amicalement,
0
I&lt;a55I&lt;e77
25 mars 2014 à 20:55
bonsoir,
je vous l'ai dit je suis novice et autodidacte sous vba
j'essaye des formules, je les bidouilles à ma sauce et ça marche ... ou pas !
je vous remercie pour l'aide , j'essaye les changements demain, je vous tiens au courant.
il y a autres choses qui ne marche pas et je ne sais pourquoi car la formule a déjà été utilisée, c'est dans l'userform Equiper.
Si vous pouviez trouver d'où vient le problème!
merci
amicalement,
0
I&lt;a55I&lt;e77
26 mars 2014 à 12:24
bonjour,
j'ai essayé,
Range("Changement_de_spectacle!E" & k).Value = resultat2.Value
rien ne change,
quant à l'assemblage il fonctionnait, mais c'est son inscription dans la cellule incriminée qui ne marche pas.
merci de l'aide
amicalement,
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
Modifié par commentcamarcheeay le 26/03/2014 à 17:52
Cela est la correction de la syntaxe. Mais comme j'ai expliqué, il faut sélectionner le texte inscrit dans la liste.
Par exemple, vous pouvez ajouter avant ce que j'ai proposé, à savoir :
resultat2.ListIndex = resultat2.ListCount - 1
Range("Changement_de_spectacle!E" & k).Value = resultat2.Value
Sinon, resultat2.Value sera vide.

P.S. J'enverrai bientôt le fichier corrigé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
26 mars 2014 à 19:26
Bonjour,

Voici le fichier contenant les corrections ...

Il y avait un problème sur deux formulaires :

1. Formulaire "transfert"

Vous utilisiez
Range("Changement_de_spectacle!E" & k).Value = resultat2.Value
pour écrire la valeur de la liste résultat 2 dans une cellule.
Le problème c'est que
resultat2.Value
ne prend uniquement la valeur de l'élément sélectionné, alors que quand vous faites remplir votre liste, vous n'indiquer pas dans votre code quel élément sélectionner.

J'ai remplacé cela en ajoutant une variable globale :
Dim gValueToWriteInSheet As String

Dans le code du bouton qui affecte une nouvelle valeur dans une liste, je met dans cette variable ce que je souhaite voir sur ma cellule
gValueToWriteInSheet = str_ass
resultat2.AddItem str_ass

Quant au bouton qui envoi le résultat de l'opération à la cellule, j'utilise la valeur de la variable globale plutôt que le texte écrit dans la liste :
Range("Changement_de_spectacle!E" & k).Value = gValueToWriteInSheet


Une autre manière de faire cela si vous ne voulez pas créer de variable globale :
Range("Changement_de_spectacle!E" & k).Value = resultat2.list(resultat2.listCount - 1)

resultat2.list(resultat2.listCount - 1)
renvoi le texte du dernier élément de la liste.

2. Formulaire "Equiper"

Là, vous utilisiez une manière facilitée pour récupérer les valeurs du texte de vos contrôles afin d'en créer un bilan à afficher sur une cellule :
str_ass = origine.List(origine.ListCount - 1)
For Each c In Me.Controls
    If c.Value = True Then str_ass = str_ass & "-" & c.Caption
Next c

Le problème ici c'est que dans le formulaire, il n'y a pas que des CheckBox.
Me.Controls
renvoi tous les contrôles se trouvant dans le formulaire. Et comme certains d'entre eux ne disposent pas de la propriété
Caption
, une erreur est levée.

Pour corriger cela, je propose de vérifier le type du contrôle avant de demander la valeur de la propriété
Caption
:
str_ass = origine.List(origine.ListCount - 1)
For Each c In Me.Controls
    If TypeOf c Is MSForms.CheckBox Then
        If c.Value = True Then str_ass = str_ass & "-" & c.Caption
    End If
Next c


3. Remarques

Comme vous êtes en train de travailler sur une grande application et que vous utilisez pleins de formulaires, je vous conseille de dissocier ce qui est affichage et ce qui est donnée. Bien qu'il est plus facile d'utiliser directement les textes des contrôles, il est préférable de mettre les données dans des variables que vous n'affichez pas forcément.
ça peut allez pour cette application, mais penser à ce points si jamais vous travaillez sur de plus grands projets.


Amicalement!
0
merci merci merci,
je viens de finaliser le projet, quelques petites modifs de cases et de présentation, pour l'instant tout marche !
merci grandement,
Amicalement
0
commentcamarcheeay Messages postés 667 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
19 mars 2014 à 22:18
Bonjour,

Je n'ai pas l'interface devant moi, mais il me semble que Range est une classe. Pour lui affecter une valeur, il faut utiliser la fonction valeur.
    k = ActiveCell.Row
range("Changement_de_spectacle!E" & k).value = resultat2.Value
Ou bien
    k = ActiveCell.Row
range("Changement_de_spectacle!E" & k).value2 = resultat2.Value
Voici une petite explication ...
-1