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 :

Source liste après filtre [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Source liste après filtre
    Bonjour à tous,

    Je suis nouveau sur le forum et débutant en VBA et je suis confronté à un problème.

    J'ai l'habitude de me débrouiller pour coder avec de nombreuses recherche sur le web et notament sur developpez.net mais sur ce point je ne trouve pas de solution malgré quelques bouts de codes trouvés que je n'arrive pas à concrétiser sur mon sujet.

    Je m'explique : dans le cadre d'un stage, je suis chargé d'améliorer certains classeur, j'ai donc choisi les tableaux dynamique, très performant ainsi que les formulaires en VBA.

    J'ai donc une base de donnée regroupé dans un tableau, remplit par l'utilisateur grâce à un formulaire que j'ai codé. Ce tableau classe des factures ("N° de Facture") par hôtels par mois ainsi que d'autres informations inutiles dans mon problème.
    J'ai créer un UserForm "Modifier". L'utilisateur sélectionne avec combobox, l'hôtels, ainsi que le mois. La liste déroulante "N° de facture" s'active alors pour les faires afficher en fonction de ces deux critères. Là est mon problème.
    Lorsque l'utilisateur sélectionne un hôtels et un mois, j'applique un AutoFilter sur ma base de donnée qui fais donc masqué les factures qui ne répondent pas aux critères. La source de donnée de ma liste N° de facture "Choix_facture" est donc variable, et malgré mes tentatives, soit la source prend toutes les factures, soit elle ne se met pas à jours si l'utilisateurs sélectionnent un autre mois ou hôtels.

    En code j'avais éventuellement ca, des informations trouvées à droite, à gauche mais que je n'arrive pas à finaliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SourceFacture()
     
    Dim c As Range
    With Worksheets("Tableau général")
      For Each c In .Range("A34:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
        If Rows(c).Hidden = False Then
        Choix_facture.AddItem (c.Value)
        End If
      Next
    End With
     
    End Sub
    Et que j'appelle dans ma combobox Choix_facture_Change().
    J'imagine que les combobox hôtels et mois doivent rentrer en jeu : "Choix_hotels2" et "Choix_mois2"

    J'espère donc que vous pourriez m'apporté une solution et que j'ai été claire dans mes explications.
    Je vous remercie d'avance.

    Cordialement, Lucas 'Tizakx

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour et bienvenue au forum,
    Supposons que tu as un bouton "recherche" sur lequel tu appuie après avoir renseigné l'hôtel et le mois et qui rempli la combobox. Le code du clique du bouton devra suivre la procédure suivante :
    1. Créer une nouvelle feuille et la nommer "selection", par exemple.
    2. Filtrer sur l'hôtel et le mois dans ta BDD (AutoFilter)
    3. Copier le résultat du filtre et le coller dans la feuille "selection" (méthode Copy)
    4. Alimenter la cbox avec la feuille "selection" -->
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Dim derLig As Long
      derLig = Sheets("selection").Range("A" & Rows.Count).End(xlUp).Row
      Choix_facture.List()= Sheets("selection").Range("A1:A" & derLig).Value
    5. Supprimer la feuille "selection"

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse.

    En revanche, il s'agit d'un formulaire modifier, dans lequel, après avoir sélectionné l'hôtel, le mois et la facture, les informations relative à celle-ci apparaissent dans le formulaire (voir image) pour que l'utilisateur puissent les modifier directement.
    Nom : Modifier.JPG
Affichages : 209
Taille : 53,2 Ko

    L'ajout de donnée dans la combobox doit se faire en même temps que l'AutoFilter.
    N'y a t-il pas un code pour dire "Prend les données dans la colonne A, à partir de la A33, sauf celle qui sont masqué" ?
    J'avais trouvé ce sujet sur le forum, mais je n'arrive pas l'adapté, j'ai essayer de chercher des informations sur la fonction UBound, mais je ne comprend pas tout : https://www.developpez.net/forums/d6...gnes-masquees/

    Ou encore ca : https://www.developpez.net/forums/d6...-d-autofiltre/

    Peut être arrivera-tu à l'adapté à mon sujet ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    La fonction ubound permet de récupérer la limite supérieure d'un tableau.

    Ce que tu dois faire pour alimenter tes combobox, c'est parcourir tes cellules et les ajouter sauf si elles sont masquées (propriété .hidden de ta cellule).
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Ca ne m'aide pas trop, comme j'ai dis, je suis débutant, j'ai appris à codé en VBA sur le tas depuis 3 semaine pour réalisé mon travaille à bien
    Je m'aide de plusieurs morceau de code pour comprendre comment c'est fait, comment ca fonctionne mais sur ce problème je sèche.

    Avec la fonction Hidden, j'ai posté un code dans mon premier post, mais il ne fonctionne pas, quesqu'y ne vas pas ?

    J'avais quelque chose comme ca qui me donnais quelques résultats plus ou moins bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
     
    Dim c As Range
    With Worksheets("Tableau général")
      For Each c In .Range("A33:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
        Choix_facture.AddItem (c.Value)
      Next
    End With
     
    End Sub
    Sans la fonction hidden, mais gràce au type, mais comment l'adapté pour qu'il se mette à jour si je viens à changé de mois ou d'hôtels dans le formulaire après une première sélection ?

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    En fait ta question porte plus sur comment détecter le changement de valeur des cbox que sur la façon d'afficher les résultats dans la dernière cbox.
    Il faut utiliser l'évènement change de la cbox --> quand tu changeras la valeur de la cbox cela déclenchera cette méthode.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Ok parfait, donc je l'ai identifier comme macro que j'appelle dans ma combobox hôtel et mois en _change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SourceFacture()
     
    Choix_facture.Clear
     
    Dim c As Range
    With Worksheets("Tableau général")
      For Each c In .Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
        Choix_facture.AddItem (c.Value)
      Next
    End With
     
    End Sub
    Hors, il ne m'affiche jamais le bon n° de facture (pourtant bien affiché dans mon tableau trié), et si je choisis un mois où il n'y a pas de facture, directement il me met une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In .Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    que je ne peux rectifier quand ré affichant manuellement des factures dans mon tableau.

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Citation Envoyé par Tizakx Voir le message
    si je choisis un mois où il n'y a pas de facture, directement il me met une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In .Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    En effet, s'il n'y a pas de factures, il n'y a pas de cellules visibles après filtre, donc il y a erreur si tu veux parcourir les cellules visibles. Il faudrait que tu fasses une gestion d'erreur (On Error Resume Next, par ex.).

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Plus d'erreur,merci, mais tu n'a répondu qu'à la moitié de mon problème.

    Il me donne la ligne du dessus (pourtant masqué).
    Quand je sélectionne un hôtel, au mois de février, il me donne les factures de janvier, même chose pour les autres mois.
    Ma colonne facture étant la A, hôtel B et mois en C.

    Est ce que ca vient du 2 de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In .Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    Que signifie t-il ?


    Je ne suis pas très contant de mon premier post sur le forums... j'ai beau écrire de long message pour être le plus clair possible, posté des morceaux de code qui semble être bon mais pas adapté à mon problème, vous me répondez de petit message, presque inutile et totalement inexpliqué (malgré que j'ai préciser deux fois que je débutais...), qui réponde à 1/4 de mon problème.
    J'ai l'impression que vos messages sont juste la pour faire un +1 à votre compteur de message....

  10. #10
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Je suis désolée d'apprendre que le forum ne répond pas à tes attentes. Nous sommes "bénévoles", rien ne nous oblige à répondre à tes questions. Nous ne sommes pas non plus magicien, si nous savons répondre, nous répondons, si nous ne connaissons pas la réponse, nous n'inventons rien. Ainsi, si nous ne connaissons que la réponse à la moitié de tes questions, nous ne répondons qu'à la moitié de tes questions. Même si nous répondons à des questions, nous en posons aussi parfois et nous apprenons aussi des autres.
    Il est parfois difficile de résoudre un problème ponctuel d'un projet sans être plongé dans le projet, nous ne pouvons donc pas toujours résoudre complètement les problèmes.
    Dans ton cas, par exemple, à mes yeux, ton code semble juste et je n'arrive pas bien à voir pourquoi tu as les problèmes que tu décris (décalage de février à janvier). Quel est ton code dans les évènements change des combobox qui doivent déclencher le remplissage de la cbox facture?

    Maintenant, si on revient sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    • Rows.Count : permet de compter le nombre de lignes totales dans les feuilles d'un classeur.
    • Cells(i, j) est la cellule de la ligne i et de la colonne j
      --> donc Cells(Rows.Count, 2) est la cellule de la dernière ligne de la feuille et de la colonne B (colonne n°2)
    • End(xlUp) permet de remonter vers la première cellule non vide (en partant du bas, donc). Il faut que la colonne B soit donc bien remplie, car dans ce cas on remonte vers la première cellule non vide de la colonne B.
    • Ainsi Range("A34:A" & .Cells(.Rows.Count, 2).End(xlUp).Row) est la plage de cellule allant de A34 jusqu'à la dernière ligne non vide de cette même colonne.
    • SpecialCells(xlCellTypeVisible) permet de ne prendre en compte que les cellules visibles.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je te remercie de ta réponse, bien expliqué et clair

    Je vais un peu mieux détaillé le processus que j'utilise :

    Ma combobox choix_hotels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Choix_hotels2_Change() 
     
    SourceFacture
     
    Sheets("Tableau Général").Activate
    Range("L15").Select
    ActiveCell = Choix_hotels2.Value
     
    filtre
     
    End Sub
    Ma combobox choix_mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Choix_mois2_Change()
     
    SourceFacture
     
    Sheets("Tableau Général").Activate
    Range("L16").Select
    ActiveCell = Choix_mois2.Value
     
    filtre
     
    End Sub
    Les deux combobox appellent la macro SourceFacture afin de faire varier la source de ma combobox Choix_facture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub SourceFacture()
     
    Choix_facture.Clear
     
    Dim c As Range
    On Error Resume Next
    With Worksheets("Tableau général")
      For Each c In .Range("A34:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
        Choix_facture.AddItem (c.Value)
      Next
    End With
     
    End Sub
    Les deux combobox hôtels et mois indique leurs value dans les cases L15 et L16 pour les critères du filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub filtre()
     
       [A33].AutoFilter Field:=2, Criteria1:="*" & [L15] & "*" 'Premier filtre en fonction du critère Hôtels
       [A33].AutoFilter Field:=3, Criteria1:="*" & [L16] & "*" 'Deuxième filtre en fonction du critère Mois
     
    End Sub
    En espérant que se soit plus claire dans ta tête

  12. #12
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Ok, là je comprens un peu mieux d'où peut venir ton problème

    Avant de re garder ton problème, juste 2 commentaires sur la syntaxe de ton code.
    • Je ne sais pas si ça change grand chose, mais j'ai toujours utilisé Call pour appeler une autre procédure. Je crois que les 2 syntaxes sont correctes, mais j'ai toujours vu plus de syntaxes avec Call que sans... il y a sûrement une raison (que je ne connais pas) ...
    • Evite au maximum d'utiliser Select/Activate/ActiveSheet/Selection/ActiveCell etc ... Ca entraîne souvent des problèmes difficilement repérables. on obtient cela avec l'enregistreur de macro, mais il faut le retravailler ensuite.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Sheets("Tableau Général").Activate
      Range("L15").Select
      ActiveCell = Choix_hotels2.Value

      Mais
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Sheets("Tableau Général").Range("L15").Value = Choix_hotels2.Value
      Plus court, plus propore et plus sûr.


    Venons-en à ton problème. Regardons la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Choix_hotels2_Change() 
        Call SourceFacture
        Sheets("Tableau Général").Range("L15").Value = Choix_hotels2.Value
        Call filtre
    End Sub
    VBA effectue les actions les unes à la suite des autres. Donc traduisons le code precedent :
    1. Appeler la procédure remplissant la combobox facture.
    2. Récupérer la valeur de la cbox choix_hotels2
    3. Appeler la procédure mettant en place les filtres.

    Or toi tu veux :
    1. Poser les fitres en fonction de a cbox Choix_hotels2
    2. Alimenter la cbox facture (suite à l'application des filtres)

    N'est-ce pas ?
    Tu fais donc les choses dans le mauvais sens !

    Autre chose auquel tu dois faire attention suite à la remarque "ne pas utiliser Activate etc...". Si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [A33].Value = "toto"
    '---ou---
    Range("A33").Value = "toto"
    sans préciser la feuille, alors tu écris "toto" dans la feuille active. Il faut donc que tu vérifies que tu sois bien sur la bonne feuille et même mieux : il faut que tu précises sur quelle feuille tu travailles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("nom de la feuille de travail").Range("A33").Value = "toto"
    D'autre part, je ne suis pas certaine qu'il soit bien utile de passer par une procédure "filtre". Tu pourrais faire les operations directement dans les évènements des controles et ne pas passer par des cellules intermediaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Choix_hotels2_Change() 
        With Sheets("Tableau Général")
            .Range("A33").AutoFilter Field:=2, Criteria1:="*" & Choix_hotels2.Value & "*"     'Premier filtre en fonction du critère Hôtels
            .Range("A33").AutoFilter Field:=3, Criteria1:="*" & Choix_mois2.Value & "*"      'Deuxième filtre en fonction du critère Mois
        End With
        Call SourceFacture
    End Sub

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Désolé, réponse un peu tardive.

    Je te remercie grandement, la fonction Choix_facture marche super bien, tes explications sont top !
    En revanche, c'est la même chose pour le bouton "Enregistrer les modifications", il modifie la ligne mais en prenant en compte celle masqué, donc la mauvaise, que faut-il que je rajoute à ma fonction ?

    Voilà le code de mon bouton :

    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
    Private Sub btnModifier_Click()
     
     
    Dim i As Integer, Col As Long, Lig As Long
        Lig = 33 + Me.Choix_facture.ListIndex + 1
     
        '---------------------------------
        xModification = True
        '---------------------------------
     
        ActiveSheet.Range("A" & Lig) = Me.Modif_Facture.Value
        ActiveSheet.Range("D" & Lig) = Me.Modif_Prix_Chbr.Value
        ActiveSheet.Range("E" & Lig) = Me.Modif_Nbr_Chbr.Value
        ActiveSheet.Range("F" & Lig) = Me.Modif_Prix_NS.Value
        ActiveSheet.Range("G" & Lig) = Me.Modif_Nbr_NS.Value
        ActiveSheet.Range("H" & Lig) = Me.Modif_Prix_PD.Value
        ActiveSheet.Range("I" & Lig) = Me.Modif_Nbr_PD.Value
        ActiveSheet.Range("J" & Lig) = Me.Modif_Prix_Repas.Value
        ActiveSheet.Range("K" & Lig) = Me.Modif_Nbr_Repas.Value
        ActiveSheet.Range("L" & Lig) = Me.Modif_Prix_Parking.Value
        ActiveSheet.Range("M" & Lig) = Me.Modif_Prix_TDS.Value
        ActiveSheet.Range("N" & Lig) = Me.Modif_TVA.Value
     
    Unload Me
     
    End Sub
    Encore merci pour tes réponses, tu m'aides beaucoup.

  14. #14
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Lig = 33 + Me.Choix_facture.ListIndex + 1
    J'imagine ton raisonnement :
    Dans la cbox facture on a inscrit les n° de factures les uns à la suite des autres dans l'ordre où ils apparaîssent dans le tableau. Donc si on prend le 3ème élément de la cbox, le n° de facture sera sur la 33 + 3ème ligne. C'est bien ça ?
    En effet, ça ne marche pas, car le n° des lignes prend en compte les lignes masquées.

    Plutôt que de faire des additions, on va chercher la ligne où se situe le n° de facture voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Application.Match(Me.Choix_facture.List(Me.Choix_facture.ListIndex),Range("A:A"),0)
    • Me.Choix_facture.ListIndex : vue ton code, tu as l'air de connaître, donc j'explique pas
    • Me.Choix_facture.List(Me.Choix_facture.ListIndex) : dans la liste de la cbox, on prend l'élément n°Me.Choix_facture.ListIndex, donc en gros, on récupère l'élément sélectionné dans la cbox
    • Application.Match(valeur_cherchee,plage_de_recherche,0) : permet de trouver la position relative de la valeur cherchée dans une plage de recherche donnée. Si tu prends toute une colonne comme plage, la position relative sera la ligne.

    Tu comprends le raisonnement ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je comprend bien le raisonnement à adopté, en revanche, il m'indique une erreur sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Application.Match(Me.Choix_facture.List(Me.Choix_facture.ListIndex),Range("A:A"),0)
    quand je souhaite enregistrer.

  16. #16
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Il t'indique quoi comme erreur ?
    Les n° des factures sont bien dans la colonne A de la feuille active ?

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Oui ils sont bien en colonne A.

    Erreur d'exécution '13':
    Incompatibilité de type

  18. #18
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Hmmm...je sèche un peu ...
    Peux-tu essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Application.Match(xxx,Range("A:A"),0)
    Avec xxx un numero de facture dont tu es sûr qu'il existe en colonne A.

  19. #19
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Avec un numéro de facture que je connais, ca à fonctionné pour changer le numéro de facture, mais une seul fois, si je veux re-modifier le champs, ca me remet la même erreur qu'avant.

  20. #20
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Tes numéros de factures sont numériques ? Pas de texte ?
    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Application.Match(CLng(Me.Choix_facture.List(Me.Choix_facture.ListIndex)),Range("A:A"),0)
    Clng permet de convertir en un entier (Long)
    Je ne comprend pas bien ta remarque :
    mais une seul fois, si je veux re-modifier le champs, ca me remet la même erreur qu'avant.
    Si tu modifies quel champ? C'est pas en cliquant sur un bouton que tu cherches Lig ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] Row source de combobox après filtre.
    Par Usgpa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2010, 23h18
  2. Récupération liste de choix après filtre
    Par p0l1n dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2010, 21h48
  3. Réponses: 1
    Dernier message: 01/07/2009, 11h44
  4. Réponses: 9
    Dernier message: 23/04/2008, 16h16
  5. Réponses: 1
    Dernier message: 09/03/2007, 07h52

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