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 :

[VBA-E] Liaison entre une listbox et un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Par défaut [VBA-E] Liaison entre une listbox et un userform
    Bonjour,
    j'ai un userform "SAISIE" avec une listbox comportant des cases a cocher( avec les propriétés de la listbox)

    je voudrais en cliquant sur l'une des cases qu'un userform(userform7, toujours le même) avec une textbox s'ouvre et me transfère ensuite les données dans une feuille de calcul("bd") à différents endroits (cellules contigües) selon l'item sélectionné;

    actuellement je n'arrive pas a faire la liaison

    j'ai joins un fichier.

    merci a+

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Lio,
    Je viens juste de faire ça.
    Pour parvenir à placer les bonnes données aux bons endroits,
    - un tableau des adresses des cellules à renseigner.
    - les textbox, combos et listbox ont, dans leur nom un index identifiable, de telle manière que cet index corresponde à l'index du tableau des adresses des cellules.
    Enfin, afin de placer chaque fiche (correspondant à une saisie et/ou sélection dans l'userform) sur une nouvelle ligne, une variable NoLigne initialisée à l'ouverture de l'userform sur la 1ère ligne vide de la BdD, NoLigne incrémentée à chaque nouvelle validation des données.
    Enfin, pour placer les données dans la feuille aux bons endroits, une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For each LeControl in Userform1.controls
         if instr(LeControl.name, "_")<>0 then
              'ici, si on a "_txt" dans le nom, c'est un textbox
              'l'index est donné par le nombre formaté à deux chiffres qui suit "_txt"("_txt01", "_txt05"... etc)
              'traitement du textbox, où 01 ou 05 correspond à l'index du tableau d'adresse
            elseif 'si on a "_lst", c'est une listbox ou un combo qu'on traite comme tels
              'ici encore, l'index de l'adresse est donné pr le nombre formaté à deux chiffres qui suit "_lst" ("_lst06", "_lst09"... etc
              'traitement de la liste où 06 correspond... etc
         endif
    Next
    Cela te permet de traiter à la fois les listes et les textbox.
    La solution du tableau d'adresses pourrait te permettre de régler également ton problème pour le fichier que tu as baptisé "fusion", pb auquel je n'ai pas eu le tps de te répondre
    Une dernière chose : pour ton tableau d'adresses, utilises cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LesAdresses = Array(Cells(1, 2), Cells(2, 2), Cells(3, 2), Cells(1, 5), Cells(2, 5), ...)
    Et pour affecter les valeurs de tes contrôles à ces adresses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range(LesAdresses(Lindex).address = LeControl.value
    'ou
    Range(LesAdresses(Lindex).address = LeControl.List(LeCombo.listindex)
    'selon que tu as un txtbox ou une liste
    Bon courage

  3. #3
    Membre éclairé Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Par défaut
    salut ousk

    Ouf je pensais n'avoir jamais de réponse j'essaye de déchiffrer tout ca

    as tu regarder le fichier joint. Je n'ai pas mis le deuxième fichier qui doit etre inamovible comme je l'avais dis j'ai préféréé scinder (mes dificultés )
    en deuxième position il y aura la concaténation de plusieurs colonnes (adresse, horaire) et en troisième la reccopie des données sur cette ffameuse feuille pour laquelle je pense pouvoir faire des transpositions, mes colonnes de ma bd étant contigües.


    merci a+

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Oui, j'ai jeté un oeil sur ton fichier. Je ne comprends pas pourquoi tu parles de concaténation. Tes données doivent bien être placées dans des cellules indépendantes. Je ne vois pas l'intérêt de les concaténer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEPANNAGE	28/02/2007	15:15 a 15:30
    chacune des données étant dans une cellule, est plus facile à traiter que
    "DEPANNAGE" & séparateur & "28/02/2007" & séparateur & "15:15 a 15:30"
    Ma foi, c'est toi qui vois.

  5. #5
    Membre éclairé Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Par défaut
    salut, pour le code je n'arrive pas a m'en sortir avec l'initialisation de la variable Noligne là pour l'instant dns cet exemple ca me restitue les données en b1 ce qui est normal et pour les mettre sur la dernière ligne (première ligne vierge) je suis paumé

    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
    Private Sub CommandButton1_Click()
     
    Sheets("bd").Select
     
     dernièreligne As Integer
     
    Dim noligne As Integer
     'dernièreligne = Range("A1").End(xlDown).Row + 1 ' Première ligne vide
     
    lesadresses = Array(Cells(1, 2), Cells(2, 2), _
           Cells(3, 2), Cells(1, 5), Cells(2, 5))
     
     
     
        For Each lecontrol In saisie.Controls
        If InStr(lecontrol.Name, "_txt01") <> 0 Then
    Range(lesadresses(lindex).Address) = lecontrol.Value
     
     
     Else
     End If
     Next
     
    End Sub

    en ce qui concerne la concaténation je suis tout a fait d'accord avec toi mais le tableau que j'envvoie chaque matin a ma direction doit comporter l'adresse et la ville dans la meme cellule ainsi que le début et la fin d'intervention (idem)
    je n'ai donc pas le choix.

    par contre je les garde en bout de BdD pour pouvoir faire des stats (afffaire à suivre...)




    merci a+

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu pourrais t'appliquer quand tu mets du code sur le forum
    Ok pour ton pb, ce ne sont pas des cellules que tu dois mettre dans ton tableau mais des colonnes. J'avais compris autre chose (et, à voir ton code, je ne vois pas quoi )
    Tu veux les coller où tes données ? dans un tableau préformaté ou dan une ligne ?
    Si c'est dans un tableau préformaté, la syntase est bonne à l'index près.
    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
    Dim dernièreligne As Integer
    Dim noligne As Integer, Lindex as integer
    Lindex = 0
     'dernièreligne = Range("A1").End(xlDown).Row + 1 ' Première ligne vide
     
    lesadresses = Array(Cells(1, 2), Cells(2, 2), Cells(3, 2), Cells(1, 5), Cells(2, 5))
        For Each lecontrol In saisie.Controls
             If InStr(lecontrol.Name, "_txt01") <> 0 Then
                     Range(lesadresses(lindex).Address) = lecontrol.Value
                     Lindex = Lindex+1
                 Else
             End If
        Next
     
    End Sub
    Si c'est sur une ligne, tu dis
    A+

Discussions similaires

  1. [VBA-E] Liaison vers une feuille non excistante
    Par Myogtha dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2007, 12h44
  2. [VBA-A] liaison entre deux tables
    Par lumbroso dans le forum VBA Access
    Réponses: 16
    Dernier message: 01/06/2006, 10h22
  3. [VBA-E] liaison entre Excel et Word
    Par fred bx dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/05/2006, 10h45
  4. [VBA-E]rafraichissement d'une listbox
    Par bastien62200 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/02/2006, 13h27
  5. Probleme de liaison entre une requete et un objet...
    Par actibluelevrai dans le forum Access
    Réponses: 4
    Dernier message: 20/11/2005, 20h26

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