[VB] Soucis pour coder sous VB

Résolu/Fermé
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010 - 20 avril 2009 à 13:10
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010 - 22 avril 2009 à 09:34
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 :)
A voir également:

30 réponses

Utilisateur anonyme
21 avril 2009 à 13:24
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
Utilisateur anonyme
21 avril 2009 à 17:22
Dis moi si ça va !

https://www.cjoint.com/?exg6dhbUwW

pour ta dernière proposition : on fait une boucle donc on ne traite pas 1 article.
1
Utilisateur anonyme
21 avril 2009 à 20:03
Ah oui j'ai oublié de coller le lien:
la version telle qu'annoncée:https://www.cjoint.com/?exjP6KNp7V

une autre version:https://www.cjoint.com/?exjOfkQsWr
1
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
20 avril 2009 à 13:51
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")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
20 avril 2009 à 14:04
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.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
20 avril 2009 à 14:08
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
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
20 avril 2009 à 15:24
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
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
20 avril 2009 à 17:10
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
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 09:28
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
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 10:43
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 )
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 10:43
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 )
0
Utilisateur anonyme
21 avril 2009 à 10:44
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+
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 10:48
J'avoue que j'suis pas très doué pour me faire comprendre ^^"

https://www.cjoint.com/?exaBaATaHm

En espérant que ça vous éclairera un peu. Je peu, au besoin, mettre des commentaires fin d'être plus clair.
0
Utilisateur anonyme
21 avril 2009 à 11:02
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+
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
22 avril 2009 à 09:34
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,"
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 11:08
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..
0
Utilisateur anonyme
21 avril 2009 à 11:16
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 +
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 11:21
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 :)
0
Utilisateur anonyme
21 avril 2009 à 11:46
Question importante : le nombre de fournitures associées est-il toujours le même ? si oui combien?
0
vash641 Messages postés 40 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 6 janvier 2010
21 avril 2009 à 11:51
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 !
0
Utilisateur anonyme
21 avril 2009 à 12:01
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
0