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 :

Userform et importation de variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut Userform et importation de variables
    Bonjour à toutes et à tous,
    Voilà, j'ai un petit souci avec le reprise d'une variable depuis un Userform et je ne sais pas si cela est possible.
    J'a créé un petit UserForm pour reprendre une donnée sur 20 proposées que je voudrais reprendre et la positionner directement à la bonne place dans un tableau. Cette donnée peut être positionnée sur une ligne différente suivant l'évolution de la hauteur du tableau.
    Actuellement, je la reprend en attribuant le résultat dans une cellule quelconque par exemple "N2", puis je la reprend en utilisant la position de la première ligne libre dans le tableau.
    Peut-on passer directement depuis la saisie du UserForm dans la bonne cellule ?
    J'ai essayé cela dans le UserForm joint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub A_Fer_Click(ByVal Lig_vid_1 As Integer)
        cells(Lig_vid_1,16) = "Fer"
        Unload Me
    End Sub
    mais cela ne fonctionne pas.
    Je vous envoie un fichier avec la procédure qui fonctionne.

    Je ne suis pas pressé, je n'ai rien sur le feu.
    Je vous remercie de m'expliquer ce que je pourrais faire.
    Si à la place, il faut 20 lignes de code, je ne pense pas que cela en vaille la peine.

    Bonnes salutations
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Où se trouve votre tableau ? vous avez une série de chiffres en colonne 'O' avec des blancs en ligne 87, et des lettres en colonne 'P'
    Faut-il mettre le résultat en ligne O87 ? en P87 ? ou plus bas ?

    Votre code serait trop lourd avec des possibilités multiples: Si vous aviez 1000 attributs, vous auriez écrit 4000 lignes de codes pour les couvrir tous.
    Voici un code plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        With ThisWorkbook.Sheets("Feuil1")
            Cells(Rows.Count, "P").End(xlUp).Offset(1, 0) = Me.ActiveControl.Caption
        End With
    End Sub
    Comment ça marche?
    1. Commencez par annuler vos anciens codes (les mettre en commentaire ou les supprimer)
    2. Les remplacer par le code i-dessus
    3. Lancer le formulaire
    4. Cliquer sur l'attribut voulu
    5. Double-cliquer sur une zone libre du formulaire
    6. Le résultat se mettra à la 1ère cellule libre de la colonne P.



    Si vous voulez changer la colonne de destination, remplacez "P" dans le code par la nouvelle colonne.

  3. #3
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    Une proposition en PJ.

    Comme la réponse précédente je n'ai pas très bien compris où précisément tu souhaites voir la valeur s'insérer. J'ai donc prit le parti de créer une nouvelle feuille et au fur et à mesure que tu cliqueras sur l'un des âges la valeur sera reportée à la suite des valeurs existantes en "A".

    Je t'ai fait l'exemple avec "Fer", "HMA", "MAC", "REN". A toi de reproduire pour les autres.

    PS: j'ai laissé en paramètre la possibilité de reporter une valeur différente du libellé du bouton.
    Si la valeur à reporter est toujours le texte du bouton tu peux utiliser Me.ActiveControl.Caption comme précisé dans la réponse précédente de Belga16.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut suite
    re bonjour, suite à vos diverses propositions, j'ai trouvé ce qu'il me fallait.
    J'ai corrigé mon code dans chaque sub que j'ai intégré au UserForm.
    Ancien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub A_Fer_Click()
    Range("N2") = "Fer"
    Unload Me
    End Sub

    Nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub A_Fer_Click()
     
    ' Déterminer la première ligne vide du tableau des données utilisées entre  « P4:DH87 ».
      Lig_vid_1 = Range("P4", "P87").End(xlDown).Row + 1
     
    ' Ecriture dans la cellule adéquate, en l’occurrence ici, la cellule « T » & Lig_vid_1.
      Cells(Lig_vid_1, 20) = "Fer"
     
      Unload Me
     
    End Sub
    Ensuite, je sors du UserForm et je retourne dans ma macro.
    Même si j'avais 4000 entrées, je me positionnerai tout de suite sur la première ligne vide avec « xlDown.Row ».
    Là, je ne peux pas avoir plus de 80 entrées.
    Je remercie tout le monde pour avoir fait quelques propositions.
    au revoir et peut-être A+

  5. #5
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    C'est une solution mais cela t'oblige à reporter ce code sur tout les sub.
    Si tu veux plus tard faire une modification de ce code tu seras obligé de faire cette modification dans toutes tes subs.

    Pour ça que je t'avais créé du code qui faisait appel à une procédure séparée. Avec une procédure séparée et seulement un appel à cette procédure dans tes subs tu auras automatiquement les corrections éventuelles de ta procédure pour chacun de tes subs.

    Le plus important c'est que tu comprennes comment ça fonctionne. Après c'est toi qui vois.

    Bonne continuation.

Discussions similaires

  1. comment importer une variable static
    Par Asmod_D dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/03/2007, 14h55
  2. Réponses: 4
    Dernier message: 07/07/2006, 17h48
  3. [Tableaux] import de variable
    Par nemo69500 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 16h34
  4. [VBA-E]Userform et transfert de variable
    Par Yanos dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/03/2006, 09h16
  5. Réponses: 7
    Dernier message: 23/01/2006, 11h53

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