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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 37
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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 ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/04/2014, 14h26
  2. Réponses: 2
    Dernier message: 08/07/2013, 14h39
  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, 16h16
  4. Réponses: 1
    Dernier message: 31/08/2009, 23h48
  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, 11h09

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