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 :

Selection d'une variable via Radiobouton afin de l'inclure dans une macro [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut Selection d'une variable via Radiobouton afin de l'inclure dans une macro
    Bonjour,

    Je suis toujours sur ma macro de conversion de fichier xls en fichier csv d'ailleurs au passage je remercie les membres du forum qui ont pris du temps pour m'aider;
    • joe.levrai
    • rdurupt
    • pc75
    • patricktoulon



    Tout d'abord voici le code de ma macro de conversion.

    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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    ub Convert_File()
     
    'Définition des variables
        Dim chemin_acces_fichier As String
        Dim xfile_source As Excel.Application
        Dim donnees_H1 As Range
        Dim donnees_H2 As Range
        Dim EAN As String
        Dim EAN_convert As String
        Dim PRICE As Double
        Dim PRICE_convert As String
        Dim PRICE_2 As Double
        Dim PRICE_convert_2 As String
        Dim Destinataire As String
        Dim First_concurrent As String
        Dim Second_concurrent As String
        Dim path_fichier
        path_fichier = ThisWorkbook.Path & "\" & "Res.csv"
     
    'Initialisation des variables
        Set xfile_source = CreateObject("Excel.Application")
        EAN = ""
        EAN_convert = ""
        PRICE = 0
        PRICE_convert = 0
     
    'Récupération du fichier à convertir
        Application.FileDialog(msoFileDialogOpen).Show
        chemin_acces_fichier = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
     
        xfile_source.Workbooks.Open (chemin_acces_fichier)
        xfile_source.Visible = True
     
    'Zone de manipulation des donnee présentes dans le fichier
        Set donnees_H1 = xfile_source.Range(xfile_source.Range("B3"), xfile_source.Range("E65000").End(xlUp))
        donnees_H1.Interior.ColorIndex = 3
     
    'Ouverture du fichier de destination pour integration sur serveur METI
    Open path_fichier For Output As #1
     
    Destinataire = "000160"
    First_concurrent = "RANG01"
    Second_concurrent = "RANG02"
     
    'Parcourir la plage de données pour récupérer convertir les EAN et les prix
        For i = 1 To donnees_H1.Rows.Count
            EAN = donnees_H1.Cells(i, 1)
            PRICE = donnees_H1.Cells(i, 4)
     
            EAN_convert = String(13 - Len(Trim(EAN)), "0") & EAN
            PRICE_convert = String(6 - Len(Trim(PRICE * 100)), "0") & PRICE * 100
     
            Print #1, Destinataire & EAN_convert & First_concurrent & PRICE_convert
     
            'Verification de la présence d'un prix dans la colonne contenant le rang tarifaire numéro 2
            'Si il y a un prix alors je l'ajoute au fichier sinon je ne fais rien
            'Recherche de la valeur par accès absolue
     
            If IsEmpty(xfile_source.Cells(i + 2, 6)) = False Then
                PRICE_2 = xfile_source.Cells(i + 2, 6)
                PRICE_convert_2 = String(6 - Len(Trim(PRICE_2 * 100)), "0") & PRICE_2 * 100
                Print #1, Destinataire & EAN_convert & Second_concurrent & PRICE_convert_2
            End If
     
        Next
     
        Close #1
        xfile_source.Application.DisplayAlerts = False
        xfile_source.Application.Quit
     
    End Sub
    Je travail actuellement sur l'interface de celle-ci afin de la rendre modulable.

    Dans mon code j'ai une variable "destinataire" qui de base corresspond a =000160 ,je voudrais mettre 2 radio bouton (ou un formulaire déroulant ) qui permet de selectionner une valeur pour destinataire (par exemple 000161 et 000162) suit au fait de selectionner cette variable ,ma macro s'executerait en prenant en compte le choix choisi pour la variable destinataire.

    J'ai fais des recherches,mais je n'arrive pas a appliquer ce que je lis a l'utilisation que je veux en faire, du a mon trés faible niveau en vba.

    En vous remerciant de votre aide.

    Cordialement.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en fonction du nombre de destinataires possibles, le choix du contrôle ne sera pas le même, voici des exemples :

    - 2 destinataires : tu peux utiliser un Togglebouton, quand on appuie ça change le destinataire
    - plus de 2 destinataires : une listebox ou une combobox est nécessaire

    après, même avec 2 destinataires, je conseille la combobox : si un jour tu dois augmenter la quantité, ton formulaire est déjà prévu en ce sens


    maintenant comment ça fonctionne :

    1) Création de la liste pour l'afficher : Où sont situées ces informations ? On doit les récupérer depuis une feuille (où ?) ou bien tu souhaites écrire les valeurs en dur dans le code ?
    2) Utilisation de la liste : l'utilisateur doit choisir une valeur (on mettra un destinataire par défaut quand ton userform s'affichera) // quand il valide ses choix, on va affecter à ta variable Destinataire la valeur qu'a choisi l'utilisateur


    c'est bien ce que tu voulais ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Bonjour Joe,merci de ton aide !

    Merci pour les explications.

    Oui je pense qu'il est plus efficient d'utliser une combobox

    1) Je pense qu'il est plus simple d'écrire la valeur dans le code nan ?

    2) Oui c'est exactement cela.


    Merci

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    si tu écris la valeur directement dans le code, tu devras effectuer de la maintenance de code en cas d'ajout ou de suppression d'un choix
    En cas de solution retenue : on aura le choix entre créer un tableau qui contient ta liste, et l'utiliser pour alimenter la combobox ... ou la solution bourrin qui consiste à alimenter la combobox manuellement dans la procédure d'initialisation de ton userform


    si tu stockes ces valeurs dans une feuille Excel, on peut créer une plage dynamique (qui s'ajustera au nombre de destinataires écrits dans ta colonne) qui alimentera ta combobox
    ça n'enlèvera pas l'aspect "maintenance" puisqu'il faudra modifier les informations de ta colonne dans Excel ... mais ça laisse la possibilité à des utilisateurs "non développeurs" de tenir cette liste à jour


    c'est toi qui choisi, on te donne des pistes et c'est toi qui tranche avec les tenants et les aboutissants.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Je pense que la maintenance pour cette donnée ne sera pas grande , a la base je pensais même faire 2 macros différentes (avec le destinataire modifier ) une dans chaque fichier selon le destinataire.

    Donc j'opterai pour la solution bourrin,apres si toi (qui a clairement plus d'expérience que moi ) pense que c'est une grosse erreur de tous inclure dans le code ,on peut envisager de stocker cela dans une feuille excel ,mais je devrais donc envoyer sois 2 fichier excel (le fichier qui fait conversion, et le fichier avec les destinataires? ) ,ou alors faire une feuille dans mon premier fichier excel ?

    Dans l'absolue les deux sont possibles pour moi ,il faut surtout voir la complexité des deux solutions.


    Merci

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    tu n'as pas besoin de plusieurs fichiers.

    on va juste affecter à Destinataire la bonne chaine de caractère, ça évite justement de dupliquer ton code pour simplement modifier cette variable

    ton interface est dans un Userform ou directement sur une feuille (ce dont j'ai l'impression)

    ta macro actuelle se lance via un clic bouton ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Mon interface est directement dans une feuille car je n'ai pas su comment utiliser l'userform.

    ma macro actuelle se lance via un clic bouton oui.


    ps: je viens de recevoir un mail m'informant que mon fichier de base que je convertissais ,a une nouvelle forme avec une nouvelle colonne,il va falloir que je rebosse déjà sur la base de la macro..

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Si c'est sur une feuille, on a pas besoin de contrôle

    tu fais une liste dans la cellule via "validation des données"

    tu nommes ta cellule, par exemple "DESTINATAIRE"

    et dans ton code, ça donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Initialisation des variables
        Set xfile_source = CreateObject("Excel.Application")
        EAN = ""
        EAN_convert = ""
        PRICE = 0
        PRICE_convert = 0
        Destinataire = Range("DESTINATAIRE")

    tu dois juste gérer le cas où l'utilisateur n'a pas sélectionné de destinataire au choix (comme toujours) :

    - en amont : tu affiches par défaut un destinataire dans ta cellule .. et l'utilisateur n'a pas d'autre choix que de prendre celui là ou en sélectionner un autre
    - lors des contrôles : au clic sur le bouton, si la cellule DESTINATAIRE est vide, un message d'avertissement et ça annule la procédure pour que l'utilisateur choisisse un destinataire
    - de manière autoritaire dans ton code : si la cellule est vide, tu affectes arbitrairement un destinataire

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Edit: J'arrive a faire marche la liste ,j'ai juste un problème en effet je rentre des valeurs tel que 000160 et 000161 ,biensur dans la liste cela devient 160 et 161 et donc dans ma conversion j'ai pas les 000 dont j'ai besoins.

    Je dois rajouter une nouvelle variable pour les 3 premiers 000 ou ?

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    tu as bien nommé la cellule contenant la liste ?
    quelle est la portée de ta plage nommée ?

    essaye cet exemple simple :

    - dans classeur vierge, tu crée une liste de validation
    *Autoriser : Liste
    *Source : TOTO;TATA

    - tu sélectionnes ta cellules et dans le cadre situé juste avant ta zone de formule tu tapes "DESTINATAIRE" et tu appuies sur Entrer : ça nomme ta cellule


    - tu colles ce code dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TestListe()
    Dim Destinataire
     
    Destinataire = Range("DESTINATAIRE").Value
     
    MsgBox Destinataire
     
    End Sub

    et je te laisse faire mumuse en lançant la procédure en changeant la valeur de la cellule au moyen de la liste déroulante


    EDIT : pour ton problème de 0, et si c'est toujours une série de 6 chiffres, tu changes le format de ta cellule:

    - clic droit sur la cellule et "Format de données"
    - tu choisi "personnalisé"
    - tu écris 000000 dans le "type"

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Ecoute ca a l'air de fonctionner ,je vais continuer a faire des tests ,mais cela semble ok !

    Merci de ton aide.

    Il y a des chances que je respote un nouveau problème la semaine prochaine ,vue que mon fichier de base de conversion a bien changé.

    Merci et bon Week end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/04/2014, 13h26
  2. Réponses: 2
    Dernier message: 08/07/2013, 13h39
  3. Figer une variable de classe lors de sa déclaration dans une itérative
    Par Freeluvs dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/02/2010, 15h16
  4. Réponses: 1
    Dernier message: 31/08/2009, 22h48
  5. lire un fichier pdf afin de l'inclure dans une base de donnée
    Par arfman dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 15/05/2009, 10h09

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