Problème Excel de formule trop longue
TOM
-
Jack -
Jack -
Salut Je suis en train de créer un logiciel pour l'Association Border Collie du Finistère (chiens de troupeau) pour choisir un type de chien pour réaliser des accouplements avec Excel et Visual Basic. Il Y a plusieurs critères le département(29,22,35 ou 56), le sexe (M ou F), la puissance (Faible, Normal ou Forte), l'Oeil (Peu, Nul, Excès, Fort, Normal), la Robe (Noir et Blanc, Tricolore, Bleue), et Le Poil (Long, mi-long et court) Avec tous ces critères il y a 1080 tableaux de chiens. L'utilisateur choisi son type de chien grace à des zones combinées et cela est renvoyé à une autre feuille sur laquelle j'ai écris les 1080 propositions. A coté de chaque propositions il y a une cellule avec une formule de condition dans cette cellule il y a le chiffre 1 d'écris si cela correspond à la proposition de l'utilisateur sinon il y a le chiffre 0. Grace a cela avec la formule Excel EQUIV je sais le numéro de la ligne que l'utilisateur a choisi. Mon problème arrive maintenant j'ai créé une nouvelle feuille et j'ai voulu mettre une condition que si la formule EQUIV = 1 par exemple cela affiche la liste des chiens demandés par exemple 29, M Fort, Peu, Noir et Blanc, Court) s'affiche puisque j'ai sur une autre feuille les 1080 tableaux des chiens. Le problème est que je ne peux mettre que 8 conditions et qu'il faut que j'en mette 1080. Merci de m'aider.
A voir également:
- Problème Excel de formule trop longue
- Formule moyenne excel plusieurs colonnes - Guide
- Formule excel si et - Guide
- Liste déroulante excel - Guide
- Formule somme excel ligne - Guide
- Mise en forme conditionnelle excel formule - Guide
4 réponses
Yop Tom,
Ben en fait j'ai un peu de mal à visualiser 1080 tableaux parce que dans ce cas c'est celui qui les a encodés que je plains :D Peut-être voulais-tu dire 1080 lignes d'un tableau contenant 6 champs (département, sexe, puissance, oeil, robe, poil) et où donc chaque ligne représente un chien ?
Quoi attends c'est une société qui arrange des plans c*l pour chiens ?! (j'ai peur... ^^)
Donc voilà c'est le concept des 1080 tableaux que je ne comprends pas. Selon moi, je comprends que "tu" as 1080 chiens répertoriés et qu'un utilisateur encode ses critères suivant un formulaire qui présente les différentes combinaisons possibles. Ensuite, sur validation de ce formulaire tu cherches parmi les 1080 lignes (=chiens) si au moins un correspond aux critères de l'utilisateur. Mais ça je crois comprendre que tu sais le faire (la fonction EQUIV retourne bien la position de la valeur recherchée dans une liste mais n'en trouve qu'une seule, donc je comprends bien ton idée de placer une condition d'égalité pour chaque ligne).
Ensuite, tu voudrais afficher la liste des chiens pour lesquels on a trouvé une correspondance avec la demande de l'utilisateur (donc toutes les lignes qui valent 1 dans ta colonne de contrôle). A ce moment là, le plus simple est d'utiliser VB. Tu boucles 1080 fois et dans cette boucle, tu testes quand tu as un "1" et alors tu écris la ligne de ce chien.
Ca fait très longtemps que je ne fais plus de VBA (si on parle bien du VB intégré dans Excel) mais ça doit ressembler à :
En gros ça parcourt la colonne où il peut y avoir des 1 et s'il trouve une correspondance il l'écrit plus loin à la suite d'une éventuelle précédente. A toi de l'adapter à tes besoins et bon courage ! ;-)
Ben en fait j'ai un peu de mal à visualiser 1080 tableaux parce que dans ce cas c'est celui qui les a encodés que je plains :D Peut-être voulais-tu dire 1080 lignes d'un tableau contenant 6 champs (département, sexe, puissance, oeil, robe, poil) et où donc chaque ligne représente un chien ?
Quoi attends c'est une société qui arrange des plans c*l pour chiens ?! (j'ai peur... ^^)
Donc voilà c'est le concept des 1080 tableaux que je ne comprends pas. Selon moi, je comprends que "tu" as 1080 chiens répertoriés et qu'un utilisateur encode ses critères suivant un formulaire qui présente les différentes combinaisons possibles. Ensuite, sur validation de ce formulaire tu cherches parmi les 1080 lignes (=chiens) si au moins un correspond aux critères de l'utilisateur. Mais ça je crois comprendre que tu sais le faire (la fonction EQUIV retourne bien la position de la valeur recherchée dans une liste mais n'en trouve qu'une seule, donc je comprends bien ton idée de placer une condition d'égalité pour chaque ligne).
Ensuite, tu voudrais afficher la liste des chiens pour lesquels on a trouvé une correspondance avec la demande de l'utilisateur (donc toutes les lignes qui valent 1 dans ta colonne de contrôle). A ce moment là, le plus simple est d'utiliser VB. Tu boucles 1080 fois et dans cette boucle, tu testes quand tu as un "1" et alors tu écris la ligne de ce chien.
Ca fait très longtemps que je ne fais plus de VBA (si on parle bien du VB intégré dans Excel) mais ça doit ressembler à :
Sub chercherChien()
Dim i As Integer
Dim correspondances As Integer
correspondances = 0
For i = 1 To 1080 Step 1
If Range("G" & i) = 1 Then
Range("A" & (correspondances + Val(2000))) = Range("A" & i).Text
Range("B" & (correspondances + Val(2000))) = Range("B" & i).Text
....
correspondances = correspondances+1
End If
Next i
End Sub
En gros ça parcourt la colonne où il peut y avoir des 1 et s'il trouve une correspondance il l'écrit plus loin à la suite d'une éventuelle précédente. A toi de l'adapter à tes besoins et bon courage ! ;-)
Salut,
A partir du moment où tu veux mettre 1080 SI imbriqués je me permets de douter de ta logique. Les structures SI sont généralement faites pour être écrites à la main (et non pas par programmation) donc tu devrais plutôt t'y prendre autrement.
Sinon, dans la limite du raisonnable tu peux utiliser cette astuce pour détourner la limitation des 7 imbrications :
comment surpasser le chiffre de 7 Si imbriquables
Pour pallier à cette restriction, vous pouvez disposer certaines conditions SI :
- soit dans d'autres cellules (nommées ou non),
- soit dans des plages nommées définies via le menu insertion (choisir Noms, puis Définir)
vous imbriquerez ensuite ces conditions dans la formule principale en faisant référence aux cellules où figurent les autres conditions
Exemple: = si ( A1<>"" ; Si2 ; Si3)
Source : http://xlbysteph.free.fr/aideinformatique/actionfonction.htm
A partir du moment où tu veux mettre 1080 SI imbriqués je me permets de douter de ta logique. Les structures SI sont généralement faites pour être écrites à la main (et non pas par programmation) donc tu devrais plutôt t'y prendre autrement.
Sinon, dans la limite du raisonnable tu peux utiliser cette astuce pour détourner la limitation des 7 imbrications :
comment surpasser le chiffre de 7 Si imbriquables
Pour pallier à cette restriction, vous pouvez disposer certaines conditions SI :
- soit dans d'autres cellules (nommées ou non),
- soit dans des plages nommées définies via le menu insertion (choisir Noms, puis Définir)
vous imbriquerez ensuite ces conditions dans la formule principale en faisant référence aux cellules où figurent les autres conditions
Exemple: = si ( A1<>"" ; Si2 ; Si3)
Source : http://xlbysteph.free.fr/aideinformatique/actionfonction.htm
Merci Posotaz de ta réponse mais saurais tu me dire exactement comment afficher un tableau X qu'un utilisateur a choisi grace au zone combinée parmi les 1080 tableaux. Les 1080 tableaux sont à la suite sur une feuille Excel et je voudrais que quand l'utilisateur met son choix dans les zones combinées une autre feuille indique le tableau choisi par l'utilisateur. Merci de m'aider sur des astuces de programmation possible car je débute dans Visual Basic et je ne connais pas les possibilités de ce programme c'est pour cela que ma logique te parait peut etre bizarre.