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 :

Projet d'aide au remplissage d'un formulaire à ComboBox multiples


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut Projet d'aide au remplissage d'un formulaire à ComboBox multiples
    Pour commencer cette année 2019 je vous souhaite à toutes et à tous une excellente santé afin de pouvoir mener à bien vos projets !

    Je suis Infirmier Libéral et nouveau sur ce forum

    J'utilise depuis 25 ans Excel pour des fonctions de base de tableur. Ma version n'est pas toute jeune mais remplie son contrat

    Dans mon travail et bien que nous soyons au XXIe siècle, je suis accablé par de la paperasserie qui ne cesse d'augmenter, c'est à n'y rien comprendre...
    Une grande partie de mes facturations de soins se fait via la carte vitale et un TPE mais il arrive régulièrement que sois contraint d'envoyer des feuilles CERFA papier.

    Le remplissage manuel est généralement fastidieux et long et je ne suis jamais à l'abri d'une erreur et donc d'un retour de la sécurité sociale pour que je refacture... Vous ne pouvez pas imaginer à quel point cela est parasitaire !

    Quand j'avais un grand nombre de feuilles à remplir pour un patient donné, je m'étais fait un petit modèle WORD que je modifiais en vitesse pour impression.

    Mes besoins sont autres aujourd'hui car je dois réaliser un grand nombre de feuilles de soins papier pour me faire payer les soins d'une remplaçante. Alors voilà il y a quelques jours je me suis lancé dans la création d'un formulaire VBA en parallèle de mon classeur.
    Si j'ai bien réussi grâce à quelques tutos explicites le codage de ma première Combobox et le remplissage automatique de quelques lignes, dés la deuxième j'ai rencontré des difficultés et j'avoue que je ne m'en sors pas tout seul d'où ma présence ici (oui, en lisant quelques sujets sur les Combobox il était indiqué que le meilleur forum d'entraide était ici ).

    J'ai donc détaillé l'ensemble de mon projetNom : PFDS.jpg
Affichages : 307
Taille : 226,6 Ko

    J'ai toujours fait en sorte d'apprendre les choses par moi même mais je manque cruellement de temps alors pour cette fois je suis venu solliciter un coup de main pour mener à bien ce projet qui me fera gagner de la tranquillité.
    Je vous laisse une copie de mon classeur si vous voulez y jeter un coup d'oeil.
    Toute aide sera la bienvenue, je désespère un peu de me libérer de cela rapidement...
    Je vous remercie.PFDS.xlsm

    Bonne journée à vous toutes et tous.

    PS : Aucune donnée patient réelle dans le fichier.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Si j'ai bien réussi grâce à quelques tutos explicites le codage de ma première Combobox et le remplissage automatique de quelques lignes, dés la deuxième j'ai rencontré des difficultés et j'avoue que je ne m'en sors pas tout seul d'où ma présence ici
    Peux-tu expliciter ces difficultés ? Une erreur ? si oui laquelle et a quel ligne ?
    Certaines personnes (dont je fais parti) n'ouvrent pas les pièce jointes (cf post en épinglé) pour avoir plus de réponse je te conseille de copier directement dans ton message les codes associés à tes combobox (avec les balises code de préférence)
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    N'ayant la "balézitude" des Masters de ce forum, j'ai osé ouvrir ton fichier et j'ai commencé à y travaillé dessus. Je t'enverrai lorsque ce sera plus abouti...
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Bonjour,
    Peux-tu expliciter ces difficultés ? Une erreur ? si oui laquelle et a quel ligne ?
    Certaines personnes (dont je fais parti) n'ouvrent pas les pièce jointes (cf post en épinglé) pour avoir plus de réponse je te conseille de copier directement dans ton message les codes associés à tes combobox (avec les balises code de préférence)
    Tout d'abord merci halaster08 de t'intéresser à mon sujet.
    Je comprends ton inquiétude légitime face aux macros.
    Voici donc la première partie du code utilisé, celui-ci me permettant de définir le patient par la ComboBox 1 et de remplir automatiquement les Textbox 2 à 6 automatiquement avec les infirmations administratives du patient :

    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
    Option Explicit
     
    Dim Ws As Worksheet
     
     
    'Pour le formulaire
     
    Private Sub UserForm_Initialize()
     
    'Pour la date de la feuille de soin
     
        TextBox1 = Date
     
    'Code Combobox1 Patient
     
    Dim J As Long
     
        Dim I As Integer
     
        ComboBox1.ColumnCount = 1 'Pour la liste déroulante Nom & Prénom du Patient
     
        ComboBox1.List() = Array()
     
        Set Ws = Sheets("Patients") 'Correspond au nom de votre onglet dans le fichier Excel
     
        With Me.ComboBox1
     
                For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
     
                .AddItem Ws.Range("A" & J)
     
            Next J
     
        End With
     
        For I = 1 To 6
     
            Me.Controls("TextBox" & I).Visible = True
     
        Next I
     
    End Sub
     
    'Pour les Données Patients
     
    Private Sub ComboBox1_Change()
     
        Dim Ligne As Long
     
        Dim I As Integer
     
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
     
        Ligne = Me.ComboBox1.ListIndex + 2
     
        TextBox2 = Ws.Cells(Ligne, "B")
     
        For I = 2 To 6
     
            Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I)
     
        Next I
     
    End Sub
    Cette partie fonctionnant bien, je me suis attelé à rentrer du code pour la deuxième section concernant le nom et le numéro administratif de la remplaçante :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Option Explicit
     
    Dim Ws As Worksheet
     
     
    Private Sub TextBox6_Change()
     
    End Sub
     
    'Pour le formulaire
     
    Private Sub UserForm_Initialize()
     
    'Pour la date de la feuille de soin
     
        TextBox1 = Date
     
    'Code Combobox1 Patient
     
    Dim J As Long
     
        Dim I As Integer
     
        ComboBox1.ColumnCount = 1 'Pour la liste déroulante Nom & Prénom du Patient
     
        ComboBox1.List() = Array()
     
        Set Ws = Sheets("Patients") 'Correspond au nom de votre onglet dans le fichier Excel
     
        With Me.ComboBox1
     
                For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
     
                .AddItem Ws.Range("A" & J)
     
            Next J
     
        End With
     
        For I = 1 To 6
     
            Me.Controls("TextBox" & I).Visible = True
     
        Next I
     
    'Code Combobox1 Remplaçante
     
    Dim L As Long
     
        Dim K As Integer
     
        ComboBox2.ColumnCount = 1 'Pour la liste déroulante Nom & Prénom de la remplaçante
     
        ComboBox2.List() = Array()
     
        Set Ws = Sheets("Remplaçante") 'Correspond au nom de votre onglet dans le fichier Excel
     
        With Me.ComboBox2
     
                For L = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
     
                .AddItem Ws.Range("A" & L)
     
            Next L
     
        End With
     
        For K = 7 To 7
     
            Me.Controls("TextBox" & I).Visible = True
     
        Next K
     
    End Sub
     
    'Pour les Données Patients
     
    Private Sub ComboBox1_Change()
     
        Dim Ligne As Long
     
        Dim I As Integer
     
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
     
        Ligne = Me.ComboBox1.ListIndex + 2
     
        TextBox2 = Ws.Cells(Ligne, "B")
     
        For I = 2 To 6
     
            Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I)
     
        Next I
     
     
    End Sub
     
    'Pour les Données Remplaçante
     
    Private Sub ComboBox2_Change()
     
        Dim Ligne As Long
     
        Dim K As Integer
     
        If Me.ComboBox2.ListIndex = -1 Then Exit Sub
     
        Ligne = Me.ComboBox2.ListIndex + 2
     
        TextBox7 = Ws.Cells(Ligne, "B")
     
        For K = 7 To 7
     
            Me.Controls("TextBox" & K) = Ws.Cells(Ligne, K)
     
        Next K
     
    End Sub
    Là les soucis commencent : En sélectionnant le patient dans la ComboBox 1, les données administratives sont décalées et je me retrouve avec un seul numéro et qui plus est pas dans la bonne case :/
    Quand je sélectionne la remplaçante dans la ComboBox 2, aucune donnée administrative s'affiche.

    J'ai donc du mal à bien dissocier ces deux ComboBox de leurs données respectives.

    J'espère que cela pourra aider, merci encore.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour le fil, bonjour le forum,

    N'ayant la "balézitude" des Masters de ce forum, j'ai osé ouvrir ton fichier et j'ai commencé à y travaillé dessus. Je t'enverrai lorsque ce sera plus abouti...
    Merci beaucoup Thautheme
    Effectivement pas de code vicieux donc c'est très sympa de ta part de te coller àce projet que j'espère avoir correctement décrit..

    J'ai aidé tellement de personnes via des fora sur d'autres sujets sur lesquels je suis plus calé que j'apprécie sincèrement de trouver un peu d'aide à mon tour.

    Bonne soirée

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Là les soucis commencent : En sélectionnant le patient dans la ComboBox 1, les données administratives sont décalées et je me retrouve avec un seul numéro et qui plus est pas dans la bonne case :/
    Qu'entends-tu par décaler ? As-tu fait des changements dans ton code( a part l'ajout du la sub combobox2_change) ?


    Quand je sélectionne la remplaçante dans la ComboBox 2, aucune donnée administrative s'affiche.
    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
    Private Sub ComboBox2_Change()
     
        Dim Ligne As Long
     
        Dim K As Integer
     
        If Me.ComboBox2.ListIndex = -1 Then Exit Sub
     
        Ligne = Me.ComboBox2.ListIndex + 2
     
        TextBox7 = Ws.Cells(Ligne, "B")
     
        For K = 7 To 7
     
            Me.Controls("TextBox" & K) = Ws.Cells(Ligne, K)
     
        Next K
     
    End Sub
    Est-ce normal que ta boucle K commence et fini à 7 ? c'est peut être pour ça que rien ne s'affiche

    idem dans la sub UserForm_Initialize:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For K = 7 To 7
     
            Me.Controls("TextBox" & I).Visible = True
     
        Next K
    boucle sur K de 7 à 7 et affichage de la textbox I
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour Halaster.

    Quand je parle de décalage sur a première sélection Combobox 1 une fois que j'ai rentré le code de la Combobox 2, je me retrouve avec les données de la Textbox 4 dans la Textbox 2 et les données des Textbox 2, 3, 5, 6 disparaissent...

    Concernant ma boucle K je vérifie cela, merci.

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par Memento2019 Voir le message
    Quand je parle de décalage sur a première sélection Combobox 1 une fois que j'ai rentré le code de la Combobox 2, je me retrouve avec les données de la Textbox 4 dans la Textbox 2 et les données des Textbox 2, 3, 5, 6 disparaissent...
    As-tu essayer de lancer ta macro en mode pas à pas (touche F8) ? tu devrais pouvoir trouver quel ligne fait disparaitre tes textbox
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  9. #9
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Un début de code. Pour le moment cela ne gère toujours pas les actes et leur somme. J'y travaille...

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Option Explicit
    Private TbTBS(1 To 18) As New ClassSom 'déclare la variable Tableau des TextBoxs pour la Somme TbTBS (pas encore opérationnel)
    Dim P As Worksheet 'déclare la variable P (onglet Patients)
    Dim R As Worksheet 'déclare la variable R (onglet Remplaçante)
    Dim M As Worksheet 'déclare la variable M (onglet Médecins)
    Dim A As Worksheet 'déclare la variable A (onglet Actes)
    Dim DLP As Long 'déclare la variable DLP (Dernière Ligne de l'onglet Parients)
    Dim DLR As Long 'déclare la variable DLR (Dernière Ligne de l'onglet Remplaçante)
    Dim DLM As Long 'déclare la variable DLM (Dernière Ligne de l'onglet Médecins)
    Dim DLA As Long 'déclare la variable DLA (Dernière Ligne de l'onglet Actes)
    Dim DLA2 As Long 'déclare la variable DLA2 (Dernière Ligne de l'onglet Actes 2)
    Dim LIP As Long 'déclare la variable LIP (LIgne de l'onglet Patients)
    Dim LIR As Long 'déclare la variable LIR (LIgne de l'onglet Remplaçante)
    Dim LIM As Long 'déclare la variable LIM (LIgne de l'onglet Médecins)
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim I As Byte 'déclare la variable I (Incrément)
     
    '**************************************************************************************************
    'cette partie concerne le module de classe [ClassSom] pour faire la somme (pas encore opérationnel)
    '**************************************************************************************************
    'TbTBS(1).TBS = Me.TextBox15 'alimente le tableau TbTBS avec la textbox15 pour la somme
    'TbTBS(2).TBS = Me.TextBox16 'alimente le tableau TbTBS avec la textbox16 pour la somme
    'TbTBS(3).TBS = Me.TextBox17 'alimente le tableau TbTBS avec la textbox17 pour la somme
    'TbTBS(4).TBS = Me.TextBox19 'alimente le tableau TbTBS avec la textbox19 pour la somme
    'TbTBS(5).TBS = Me.TextBox20 'alimente le tableau TbTBS avec la textbox20 pour la somme
    'TbTBS(6).TBS = Me.TextBox21 'alimente le tableau TbTBS avec la textbox21 pour la somme
    'TbTBS(7).TBS = Me.TextBox23 'alimente le tableau TbTBS avec la textbox23 pour la somme
    'TbTBS(8).TBS = Me.TextBox24 'alimente le tableau TbTBS avec la textbox24 pour la somme
    'TbTBS(9).TBS = Me.TextBox25 'alimente le tableau TbTBS avec la textbox25 pour la somme
    'TbTBS(10).TBS = Me.TextBox27 'alimente le tableau TbTBS avec la textbox27 pour la somme
    'TbTBS(11).TBS = Me.TextBox28 'alimente le tableau TbTBS avec la textbox28 pour la somme
    'TbTBS(12).TBS = Me.TextBox29 'alimente le tableau TbTBS avec la textbox29 pour la somme
    'TbTBS(13).TBS = Me.TextBox31 'alimente le tableau TbTBS avec la textbox31 pour la somme
    'TbTBS(14).TBS = Me.TextBox32 'alimente le tableau TbTBS avec la textbox32 pour la somme
    'TbTBS(15).TBS = Me.TextBox33 'alimente le tableau TbTBS avec la textbox33 pour la somme
    'TbTBS(16).TBS = Me.TextBox35 'alimente le tableau TbTBS avec la textbox35 pour la somme
    'TbTBS(17).TBS = Me.TextBox36 'alimente le tableau TbTBS avec la textbox36 pour la somme
    'TbTBS(18).TBS = Me.TextBox37 'alimente le tableau TbTBS avec la textbox37 pour la somme
    '**************************************************************************************************
     
    Set P = Sheets("Patients") 'définit l'onglet P
    Set R = Sheets("Remplaçante") 'définit l'onglet R
    Set M = Sheets("Médecins") 'définit l'onglet M
    Set A = Sheets("Actes") 'définit l'onglet A
    DLP = P.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLP de la colonne A de l'onglet P
    DLR = R.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLR de la colonne A de l'onglet R
    DLM = M.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLM de la colonne A de l'onglet M
    DLA = A.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLA de la colonne A de l'onglet A
    DLA2 = A.Cells(Application.Rows.Count, "D").End(xlUp).Row 'définit la dernière ligne éditée DLA2 de la colonne C de l'onglet A
    Me.TextBox1.Value = Date 'renvoie la date dans la TextBox1
    If DLP <= 2 Then Me.ComboBox1.AddItem P.Range("A2").Value Else Me.ComboBox1.List = P.Range("A2:A" & DLP).Value 'alimente la ComboBox1
    If DLR <= 2 Then Me.ComboBox2.AddItem R.Range("A2").Value Else Me.ComboBox2.List = R.Range("A2:A" & DLR).Value 'alimente la ComboBox2
    If DLM <= 2 Then Me.ComboBox3.AddItem M.Range("A2").Value Else Me.ComboBox3.List = M.Range("A2:A" & DLM).Value 'alimente la ComboBox3
    For I = 4 To 9 'boucle sur les comboboxes 4 à 9
        Me.Controls("ComboBox" & I).List = A.Range("A2:A" & DLA).Value 'alimente la combobox de la boucle
    Next I 'prochaine combobox de la boucle
    For I = 10 To 15 'boucle sur les comboboxes 10 à 15
        If DLA2 <= 2 Then Me.Controls("ComboBox" & I).AddItem A.Range("D2").Value Else Me.Controls("ComboBox" & I).List = A.Range("D2:D" & DLA2).Value 'alimente la combobox de la boucle
    Next I 'prochaine combobox de la boucle
    End Sub
     
    Private Sub ComboBox1_Change() 'au changement de la ComboBox1 (Pour les Données Patients)
    Dim I As Byte 'déclare la variable I (Incrément)
     
    If Me.ComboBox1.ListIndex = -1 Then Me.ComboBox1.Value = "" 'si la valeur de la ComboBox1 ne fait pas partie de sa liste, vide la ComboBox1
    LIP = Me.ComboBox1.ListIndex + 2 'définit la ligne du patient LIP
    For I = 2 To 6 'boucle sur les 5 textboxes 2 à 6
        If Me.ComboBox1.Value = "" Then Me.Controls("TextBox" & I).Value = "" Else Me.Controls("TextBox" & I).Value = P.Cells(LIP, I) 'récupère la donnée correspondante au médecin
    Next I 'prichaine textbox de la boucle
    End Sub
     
    Private Sub ComboBox2_Change() 'au changement de la ComboBox2 (Pour la Donnée Remplaçante)
    If Me.ComboBox2.ListIndex = -1 Then Me.ComboBox2.Value = "" 'si la valeur de la ComboBox2 ne fait pas partie de sa liste, vide la ComboBox2
    LIR = Me.ComboBox2.ListIndex + 2 'définit la ligne de la remplaçante LIR
    If Me.ComboBox2.Value = "" Then Me.TextBox7.Value = "" Else Me.TextBox7.Value = R.Cells(LIR, "B") 'récupère la donnée correspondante à la remplaçante
    End Sub
     
    Private Sub ComboBox3_Change() 'au changement de la ComboBox3 (Pour la Donnée Médecin)
    If Me.ComboBox3.ListIndex = -1 Then Me.ComboBox3.Value = "" 'si la valeur de la ComboBox3 ne fait pas partie de sa liste, vide la ComboBox3
    LIM = Me.ComboBox3.ListIndex + 2 'définit la ligne du médecin LIM
    If Me.ComboBox3.Value = "" Then Me.TextBox8.Value = "" Else Me.TextBox8.Value = M.Cells(LIM, "C") 'récupère la donnée correspondante au médecin
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  10. #10
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Exemple simple de facture en PJ

    Boisgontier
    Fichiers attachés Fichiers attachés

  11. #11
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Une version 01 qui fonctionne avec un module de classe pour la somme. Pour les tests, j'ai modifié la taille de certains contrôles... Ça fonctionne mais si tu choisis un acte dans une de comboboxes 4 à 9, puis tu te rends compte que tu t'es trompé et tu modifies l'acte, la somme n'est plus bonne... Je cherche une solution pour la version 2...
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  12. #12
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    La version 2 corrigée. J'ai toujours un soucis avec les comboboxes 10 à 15. Si tu coches puis tu veux annuler il faudra choisir "-2,5" pour que la somme soit bonne. Cela t'oblige, si tu rajoutes des IFD, à lister chaque fois la valeur et son contraire...
    Sinon ça à l'air de fonctionner... Attention ! J'ai rajouté un module standard avec des variables publiques.


    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonsoir Thautheme !

    Incroyable ! Tu as dû y passer un sacré moment !
    Cela fonctionne et superbement bien !

    Concernant les ComboBox 10 à 15, cela fonctionne ainsi et ne pose pas de problème.
    Je pense que le problème vient du fait que ces données sont déjà dans le tableau de la feuille Actes. J'aurais dû les dissocier dans une feuille "Actes2" je pense avec uniquement ces IFD avec pour valeur "2.5" ou " ". Mais là ce serait vraiment du détail.

    Sur la version 1 que j'ai testée aussi du coup il n'y avait pas de "0" qui apparaissaient dans les TextBox, je suppose qu'en rendant actif le module de calcul ils sont apparus. Pas moyen de les faire disparaitre ?

    Mais quel travail ! J'ai regardé le code pour tenter d'y comprendre les principes et tu m'as tout détaillé, merci !

    Je n'ai plus qu'à travailler la mise en forme de certaines TextBox pour coller au Cerfa (Les numéros de Sécu, les dates dans les cases par exemple) et cela sera juste parfait et quel gain de temps

    Par contre :
    Attention ! J'ai rajouté un module standard avec des variables publiques.
    Désolé mais je ne comprends pas la mise en garde :/

    PS : Je cherchais à supprimer l'image de fond pour un test d'impression quand j'ai découvert que l'on pouvait la supprimer uniquement pour une session. Peut-on imaginer cliquer sur un bouton "impression" et que justement à ce moment l'image disparaisse pour ne laisser que les cases remplies pour l'impression ? Je lance cela comme ça, tu en as fais assez c'est juste pour m'informer et tenter d'aller un peu plus loin

    Bonne soirée et merci encore !

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    As-tu essayer de lancer ta macro en mode pas à pas (touche F8) ? tu devrais pouvoir trouver quel ligne fait disparaitre tes textbox
    Merci Halaster08 pour cette astuce. En relisant mon code de cette manière j'ai pu voir comment mes boucles fonctionnaient et où pouvaient être les erreurs.
    Thautheme ayant ouvré entre deux je n'ai vraiment pas avancé seul par contre...

  15. #15
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    La version 03 sans les zéros... Je continue... Est-ce qu'il n'y aura toujours qu'une seule IFD, ou peut-il y en avoir plusieurs ?


    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour Thautheme,

    Je vais aller tester cela de suite pendant ma session interminable de comptabilité...

    Concernant les IFD, c'est 2,5 € ou rien. Ce pour chaque ligne

    A plus tard

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour Tautheme,

    J'ai pu constater l'absence de zéros
    Ne me reste qu'à caler mes cases pour l'impression, gérer l'impression sans fond et gérer les polices et écarts des textbox pour coller au Cerfa.
    Grand travail que tu as fais là !
    Je t'enverrai un petit MP à ce sujet
    Bonne journée

    PS : Dans l'exemple plus haut d'un calcul de facture, les données sont éditées sur le formulaire et renvoyées sur excel, certainement justement pour l'impression. Dans mon cas cela ne serait pas plus aisé ?

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Après une grosse rupture internet je peux retravailler dessus.

    Au niveau de l'impression j'ai inséré un bouton qui me permet d'imprimer tel quel le formulaire.
    Cela n'est pas suffisant alors j'ai regardé quelques codes et celui-ci semble approprié à ma demande en l'adaptant car il permet notamment de supprimer la visibilité du bouton d'impression durant l'impression, de régler des paramètres de centrage de la feuille ou même encore d'avoir un aperçu avant impression.
    Seulement voilà j'ai un souci de déclaration keybd_event à chaque fois que je tente d'utiliser ce genre de code pourtant bien pratique.

    Si quelqu'un passe par ici et veut bien me renseigner je le remercie par avance.
    Bonne journée

    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
    'Cache les boutons désignés pendant l'impression
    Private Sub CommandButton1_Click()
      Me.CommandButton1.Visible = False
     
      ' Copie d'écran de la forme active
      keybd_event vbKeySnapshot, 1, 0&, 0&
      ' désactive le rafraichissement de l'écran
      Application.ScreenUpdating = False
      Application.Wait Now + TimeValue("0:00:02")
      DoEvents
      Me.Hide
      ' Ajoute une feuille pour coller l'image de la forme
      'Set Ws = Sheets.Add
      ' renomme la feuille
      With Sheets.Add
        '.Name = "imprim"
        .Paste
        Application.PrintCommunication = False
        With .PageSetup
          ' En mode paysage  'xlLandscape
          .Orientation = xlLandscape    ' xlPortrait
          ' impression centrée dans la page
          .CenterHorizontally = True
            .CenterVertically = True
          .Zoom = False
          .FitToPagesWide = 1
          .FitToPagesTall = False
          .LeftMargin = Application.InchesToPoints(1#)
          .RightMargin = Application.InchesToPoints(0)
          .TopMargin = Application.InchesToPoints(0)
          .BottomMargin = Application.InchesToPoints(0)
        End With
        Application.PrintCommunication = True
        '.PrintOut
        .PrintPreview
     
        ' enléve les messages d'alerte
        Application.DisplayAlerts = False
        .Delete
        'remet les messages d'alerte
        Application.DisplayAlerts = True
      End With
      ' réactive le rafraichissement de l'écran  réaffiche les boutons désignés après l'impression
      Application.ScreenUpdating = True
      Me.CommandButton1.Visible = True
     
      Me.Show
     
    End Sub
    Ce code pourrait fonctionner mais j'ai le même souci !

    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
    Private Sub CommandButton1_Click()
    Dim Ws As Worksheet
     
        'Copie d'écran de la forme active
        keybd_event vbKeySnapshot, 1, 0&, 0&
        DoEvents
     
        'Ajoute une feuille pour coller l'image de la forme
        Set Ws = Sheets.Add
        Ws.PageSetup.Orientation = xlLandscape
        Ws.Paste
     
        'impression centrée dans la page
        Application.DisplayAlerts = False
     
        With Ws
            With Ws.PageSetup
            .PrintArea = "A1:N40"
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
            End With
     
     
        .PageSetup.CenterHorizontally = True
        .PageSetup.CenterVertically = True
        .PrintOut
        .Delete
     
     
     
        End With
     
        Application.DisplayAlerts = True
     
     
    End Sub

  19. #19
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Dans la version 4 j'ai amélioré les comboboxes pour les IFD puisque tu m'as dit que c'était fixe. Ensuite j'ai remis la propriété Picture de l'Userform1 à zéro. La photo ne sera plus en dur mais à l'activation de l'Userform1. Il te faudra mettre à jour le code (ligne 17) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm1.Picture = LoadPicture("ici tu mets le chemin d'accès complet de l'image de la feuille de soin")

    J'ai rajouté un bouton Imprimer avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click() 'bouton Imprimer
    Me.CommandButton1.Visible = False 'masque le bouton Imprimer
    UserForm1.Picture = LoadPicture("") 'supprime l'image de l'Userform1
    UserForm1.PrintForm 'imprime l'Userform1
    Unload Me 'vide et ferme l'userform en cours
    End Sub
    Ainsi, ton Userform s'affiche avec la photo, tu le remplis, tu cliques sur Imprimer et il s'imprime sans le bouton ni la photo...

    Il ne te reste plus qu'à cadrer les contrôles pour qu'il correspondent a l'emplacement de la feuille de soins...
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2019
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour Thauthème !

    C'est tout simplement génial !
    J'avais le même code bouton pour le moment sans la suppression de la photo

    Par contre quand je clique sur le bouton imprimer, la page retourne sous le développeur vba dont je dois relancer l'exécution. Cela est-il prévu ainsi ?

Discussions similaires

  1. Aide au remplissage de formulaire
    Par Alex-1501 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 18/05/2016, 13h45
  2. Réponses: 2
    Dernier message: 11/12/2007, 23h18
  3. [Struts] pré-remplissage d'un formulaire
    Par touriste44 dans le forum Struts 1
    Réponses: 10
    Dernier message: 27/10/2005, 12h16
  4. Réponses: 3
    Dernier message: 24/10/2005, 11h32
  5. Réponses: 32
    Dernier message: 22/09/2005, 10h40

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