Pb pour prendre en consideration une ligne

I<a55I<e77 Messages postés 2 Statut Membre -  
 I<a55I<e77 -
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

7 réponses

  1. commentcamarcheeay Messages postés 735 Statut Membre 86
     
    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
  2. I<a55I<e77
     
    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
  3. I&lt;a55I&lt;e77 Messages postés 2 Statut Membre
     
    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
    1. commentcamarcheeay Messages postés 735 Statut Membre 86
       
      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
    2. I&lt;a55I&lt;e77
       
      http://cjoint.com/?DCztCS8Frbc

      ci dessus le lien pour le fichier
      bon travail, si tu peux me sortir de là !
      0
  4. commentcamarcheeay Messages postés 735 Statut Membre 86
     
    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
    1. I&lt;a55I&lt;e77
       
      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
    2. I&lt;a55I&lt;e77
       
      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
    3. commentcamarcheeay Messages postés 735 Statut Membre 86
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. commentcamarcheeay Messages postés 735 Statut Membre 86
     
    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
  7. I<a55I<e77
     
    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
  8. commentcamarcheeay Messages postés 735 Statut Membre 86
     
    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