[VB] Soucis pour coder sous VB

Résolu
Bonjour, je souhaiterais quelques précision concernant mon soucis du moment sur excel:

Pour faire simple, j'ais à ma disposition un classeur excel fournit de 2 feuilles.

A partir de la saisi de numéro sur la première feuille ( sur les lignes A2 à A11 ) sortir les fournitures associées aux numéros ( les fournitures étant entrées au préalable sur la seconde feuille du classeur )

Par exemple, pour le numéro 1, les fournitures 1, 2 et 5 lui sont associés.

En feuille 1 j'ais deux colonnes, N° article en A et l'état de l'article ( VRAI ou FAUX ) en B.
En feuille 2 j'ais deux colonnes aussi, A pour le N° de l'article et B pour les fournitures associées à cet article.

Mon problème ce situe au niveau du passage de la feuille 1 à la 2, car une fois que j'ai saisi le numéro je ne vois pas comment basculer sur la feuille 2 et "lire" les fournitures qui lui sont associés.

Par exemple, quand je "sélectionne" l'article numéro 1 ( que j'ais codé via VB par un système de case à cocher ) je souhaiterais avoir sur la feuille 2, sur la colonne qui suit celle des fournitures, le mot "VRAI" activé devant les fournitures associé à l'article 1, et par exemple mettre tout les autres à "FAUX" par défaut ( ils passeraient alors à "VRAI" lorsque l'article qui lui est associé serait coché )

J'espère avoir été clair, n'hésitez pas à me demander quelques précisions si besoin :)
Configuration: Windows Vista
Firefox 3.0.8

30 réponses

Résumé de la discussion

Le problème porte sur deux feuilles d’un classeur Excel (Articles et Fournitures) où la saisie d’un numéro sur Articles doit afficher les fournitures associées sur Fournitures et activer les états VRAI/FAUX. Des propositions évoquent une macro qui lit les fournitures liées à l’article sélectionné, puis écrit VRAI dans la colonne correspondante et FAUX ailleurs. Plusieurs échanges portent sur le déclenchement, le lien entre les cases à cocher et le nom d’article, ainsi que l’extension du système à davantage d’articles. En pratique, les solutions reposent sur l’identification par numéro, la récupération des codes de fournitures dans la colonne B et une boucle qui ajuste VRAI/FAUX selon chaque ligne.

Bobot (l’IA à votre service)
  1. J'arrive à faire une procédure globale,
    mais le problème je n'arrive pas à faire le lien entre la case à cocher et la cellule contenant le nom de l'article, donc pour le moment pas d'action par article

    Par ailleurs les article s'appellent article1 , article2... dans la feuille articles et 1, 2... dans la feuille fournitures; est ce un nom générique pour les tests ; les noms seront-ils différents dans l'utilisation réelle?
    actuellement je me base sur les numéros, faut-il que je continue dans ce sens? j'attends ta réponse
    1. Contributeur
      je n'ai pas vraiment le temps de sortir un code comme ca mais je vais aiguiller tes recherces

      - quand tu selectionne ton produit il faut deja que ds la feuille le cellule en question puis etre sélectionner
      - trouver le moyen de découper les valeurs présentes dans ta colonne B pour pouvoir enregistré dans des variables différentes (exemple si tu as ds le cellule B 1,2,5 il faut enregistrer 1 2 et 5 séparement ds des variables genre $var1, $var2 etc.....)
      - une fois c'est valeur récuperer, passer sur la feuille 2
      - faire alors une boucle sur toutes les lignes de ton tableau. utilisé une condition SI pour verifier si ton produit est présent ou pas. en admettons que tu as enregistré les différentes fournitures dans des variables ($var1,$var 2....) tu aura a peu près ca pour la premiere ligne (si b1=$var1 or b1=$var c1 = "vrai" else c1="faux")
      1. Merci pour ton aiguillage ;)

        J'ais séparé les différentes fournitures comme suit sur la seconde feuille:

        A B C
        1 fourniture1 VRAI
        1 fourniture2 VRAI
        1 fourniture5 VRAI
        2 fourniture3 FAUX

        Le 2 indiquant que je ne suis plus dans l'article 1 mais le second, l'état indiquant que l'article 1 est coché, mais pas le second.

        J'ais utilisé la commande =Feuil1!B2 pour recopier l'état de chaque articles sur la seconde feuille, ne sachant pas la syntaxe sous VB pour spécifier que je souhaite copier l'état de la cellule d'état ( VRAI ou FAUX ) de la feuille 1 dans une cellule de la feuille 2.
        1. Contributeur
          dans le cas de ta présentation dans ton code vb il faut faire une boucle sur la 1ere feuille pour lire chaque ligne et stocker ds des variables chaque fournitures pour lesquels l'article et 1
          1. L'ennui c'est qu'on m'impose de fonctionner avec la seconde feuille qui contiendra, à terme, plus de 600 fournitures ( je devrais définir article par article quelles sont les fournitures à associer manuellement sous excel et une seule fois, sans passer par VB )

            J'ais donc tenté de coder cela dans la première feuille, mais l'erreur9 fait son apparition:

            Sub ActiverFourniture()

            Dim I As Integer
            I = 2
            For I = 2 To 11
            If Workbooks("Test_devis_boite").Worksheets("Articles").Cells(I, 2).Value = VRAI Then Worksheets("Fournitures").Cells(2, 4).Value = VRAI 'Activation de la Fourniture1
            If Workbooks("Test_devis_boite").Worksheets("Feuil1").Cells(I, 2).Value = VRAI Then Worksheets("Feuil2").Cells(3, 4).Value = VRAI 'Activation de la Fourniture2
            If Workbooks("Test_devis_boite").Worksheets("Feuil1").Cells(I, 2).Value = VRAI Then Worksheets("Feuil2").Cells(4, 4).Value = VRAI 'Activation de la Fourniture5
            If Workbooks("Test_devis_boite").Worksheets("Feuil1").Cells(I, 2).Value = FAUX Then Worksheets("Feuil2").Cells(2, 4).Value = FAUX 'Désactivation de la Fourniture1
            If Workbooks("Test_devis_boite").Worksheets("Feuil1").Cells(I, 2).Value = FAUX Then Worksheets("Feuil2").Cells(3, 4).Value = FAUX 'Désactivation de la Fourniture2
            If Workbooks("Test_devis_boite").Worksheets("Feuil1").Cells(I, 2).Value = FAUX Then Worksheets("Feuil2").Cells(4, 4).Value = FAUX 'Désactivation de la Fourniture5
            Next I
            End Sub

            J'ais tenté une autre syntaxe sur la première ligne mais meme avec la syntaxe de la seconde ligne ça me donne la même erreur. Je me tatais à faire un case, mais ça ne change pas l'erreur non plus :s
            1. Contributeur
              oui en effet si tu dois taper 660 fois la meme chose c pas simple

              si ton fichier n'est réellement confidentiel il faudrait voir si tu peux me l'envoyer
              1. Je ne peux pas malheureusement ( je ne trouve pas l'option joindre un fichier sur le message privé de ce site )

                De plus je n'arrive pas à résoudre mon souci d'erreur 9 ( l'indice n'appartient pas à la sélection ) qui me bloque sur l'activation ou non des fournitures dans le code si dessus :s
                1. J'ais tenté de coder ça autrement, pour la validation ou non des fournitures:

                  Dim I as integer

                  For I = 2 To 4
                  Select Case Range("B2").Value
                  Case Range("B2").Value = False
                  Worksheets("Fournitures").Cells(I, 4).Value = False
                  Case Range("B2").Value = True
                  Worksheets("Fournitures").Cells(I, 4).Value = True
                  End Select
                  Next I

                  Ceci pour l'article 1, les lignes 2 à 5 de la feuille 2 étant les fournitures 1,2 et 5. L'ennui c'est que la macro marche, mais ne m'affiche pas "vrai" ou "faux" quand je coche ou non la case de l'article 1. ce code est dans la première feuille du classeur.

                  Je cherche aussi à faire une seconde boucle en faisant varier le nombre d'article de 1 à 10 ( dans un premier temps, mais ça ne marche pas:

                  Dim I as integer
                  Dim J as integer

                  For J = 2 to 11
                  For I = 2 To 4
                  Select Case Cells(2,J).Value
                  Case Cells(2,J).Value = False
                  Worksheets("Fournitures").Cells(I, 4).Value = False
                  Case Cells(2,J).Value = True
                  Worksheets("Fournitures").Cells(I, 4).Value = True
                  End Select
                  Next I
                  Next J

                  En sachant que je m'arrangerait ultérieurement pour le cas ou les articles ne contiennent pas le même nombre de fournitures ( cases vides pour les articles contenant moins de fournitures que l'article en possedant le plus )
                  1. J'ais tenté de coder ça autrement, pour la validation ou non des fournitures:

                    Dim I as integer

                    For I = 2 To 4
                    Select Case Range("B2").Value
                    Case Range("B2").Value = False
                    Worksheets("Fournitures").Cells(I, 4).Value = False
                    Case Range("B2").Value = True
                    Worksheets("Fournitures").Cells(I, 4).Value = True
                    End Select
                    Next I

                    Ceci pour l'article 1, les lignes 2 à 5 de la feuille 2 étant les fournitures 1,2 et 5. L'ennui c'est que la macro marche, mais ne m'affiche pas "vrai" ou "faux" quand je coche ou non la case de l'article 1. ce code est dans la première feuille du classeur.

                    Je cherche aussi à faire une seconde boucle en faisant varier le nombre d'article de 1 à 10 ( dans un premier temps, mais ça ne marche pas:

                    Dim I as integer
                    Dim J as integer

                    For J = 2 to 11
                    For I = 2 To 4
                    Select Case Cells(2,J).Value
                    Case Cells(2,J).Value = False
                    Worksheets("Fournitures").Cells(I, 4).Value = False
                    Case Cells(2,J).Value = True
                    Worksheets("Fournitures").Cells(I, 4).Value = True
                    End Select
                    Next I
                    Next J

                    En sachant que je m'arrangerait ultérieurement pour le cas ou les articles ne contiennent pas le même nombre de fournitures ( cases vides pour les articles contenant moins de fournitures que l'article en possedant le plus )
                    1. J'ai tenté de comprendre le besoin, en vain.
                      Si tu pouvais mettre ton fichier sur https://www.cjoint.com/ et copier le lien dans une réponse, ce serait plus facile de comprendre et t'aider.
                      A+
                      1. J'ai rien compris .
                        dans tes explications tu parles de feuille 1 feuille 2, dans ton classeur les deux première feuilles portent un nom différent et la 3ème feuille s'appelle feuil1 !
                        Pourrais tu ,en termes clairs et concrets, spécifier ton besoin?

                        Comment est lancer ta sub AssocierFourniture()

                        A+
                        1. J'ais testé de poster un nouveau sujet mais je ne vois rien sur mon navigateur, je tente de poser ma question directement à toi ^^'

                          "Bonjour, je souhaite masquer les lignes d'un tableur contenant "FAUX" dans la colonne D et conserver les lignes contenant VRAI. J'ais tenté de coder ça mais rien ne se passe :s

                          Dim i As Integer
                          Dim Compt As Integer
                          
                          Compt = 1
                          
                          While Cells(Compt, 4).Value <> ""
                              Compt = Compt + 1
                          Wend
                          
                          
                          
                              For i = 2 To Compt - 1
                                  If Cells(i, 4) = "FAUX" Then Rows(i).Hidden = True
                                  If Cells(i, 4) = "VRAI" Then Rows(i).Hidden = False
                                 
                              Next i


                          Le while étant la car je n'ais pas de nombre de ligne prédéfinis, mais j'suis débutant donc pas sur que j'ai bien compris :s
                          Cordialement,"
                      2. Ok:
                        Feuille1=Articles
                        Feuille2=Fournitures
                        Les autres feuilles pour le moment ne sont pas à considérer.

                        Dans un premier temps, il faut que, lorsque je coche la case "article1" dans la feuille "Articles" les fournitures 1,2 et 3 s'activent ( se mettent à "VRAI" ) en colonne D de la feuille "fournitures". Elles se mettront à "FAUX" si la case est décoché.

                        Ensuite il faut que j'étende ça aux articles 2, 3 et 4 avec leurs fournitures associées ( le numéro de l'article associé est en colonne B de la feuille "fournitures" )

                        N'hésite pas à me demander de plus amples informations :)

                        EDIT: Pour la commande "AssocierFourniture" étant débutant je ne peux te répondre, je tente au maximum de me débrouiller avec ce que je trouve sur le forum pour faire marcher le schmilblic..
                        1. Dans un premier temps, il faut que, lorsque je coche la case "article1" dans la feuille "Articles" les fournitures 1,2 et 5 s'activent ( se mettent à "VRAI" ) en colonne D de la feuille "fournitures". Elles se mettront à "FAUX" si la case est décoché.

                          Comment connaitre les fournitures associées? tu précises pour l'article 1 les fournitures 1,2 et 5, si je regarde dans la feuille "fournitures" les fournitures associées à l'article 1 sont fournitures 1,2 et 3! Faut il prendre les données du tableau

                          Mais je comprends un peu mieux
                          A +
                          1. Les fournitures seront associées une seule fois et de manière manuelle. J'ais édité mon message précédent car en effet j'avais fais une erreur de frappe. ( pour l'aticle 1 c'est bien les fournitures 1,2 et 3 qu'il faut prendre )

                            Il faut donc prendre les données du tableau :)
                            1. Question importante : le nombre de fournitures associées est-il toujours le même ? si oui combien?
                              1. Le nombre de fourniture sera différent selon l'article, je pensais contourner le problème en fixant ce nombre sur l'article contenant le plus de fourniture, et pour les autres articles mettre un 'false' peut importe l'état de l'article.

                                Pour être plus clair, je pensais faire ceci par exemple:

                                NB max de fourniture:3

                                L'article contient que deux fournitures;

                                Article1 ==> fourniture1 true/false ( géré par la boucle )
                                ==> fourniture2 true/false ( géré par la boucle )
                                ==> fourniture3 false ( imposé car l'article ne comporte pas de 3 ème fourniture )

                                M%ais si tu as une idée plus simple je suis preneur !
                                1. je m'étais orienté sur un boucle :
                                  en gros: tant qu'on est sur le même article en feuille fournitures mettre la même valeur qu'en feuille articles

                                  ca ne limite pas le nombre de fournitures

                                  est ce qu'un article peut ne pas avoir de fourniture?

                                  Ca avance sauf la manière de lancer cette procédure
                                  • 1
                                  • 2