Bonjour, je souhaiterais créer une fonction qui par exemple si j'ai 12 me sort toutes les multiplications qui peuvent donner 12: c'est à dire: 4x3;3x4;2x6;6x2;12x1;1x12.
Une idée de comment faire ça?je galère!
Bonjour, je souhaiterais créer une fonction qui par exemple si j'ai 12 me sort toutes les multiplications qui peuvent donner 12: c'est à dire: 4x3;3x4;2x6;6x2;12x1;1x12.
Une idée de comment faire ça?je galère!
Bonjour,
des pistes ce n'est pas très méchant quand on la les bon outils
regarde ceci
\ donne la partie entière de la division
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 i=12\5 msgbox i
Il te suffit de voir si 12/a =12\a si c'est le cas alors a est un multiple de 12
Ensuite pour sortir le résultat tu fait une chaine de caratère avec de la concaténation
Tu boucle sur tout les entiers entre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 dim chaine as integer a=3 b=4 chaine=chaine & a & "x" & b & ";" a=2 b=6 chaine=chaine & a & "x" & b & ";" msgbox chaine
1 et tonnombre/2
tu réalise le teste si c'est le cas tu rajoute un morceau a ta chaine de carctère et tu as gagné
Bon il va te faloir faire un test pour t'assurer que tu ne mette pas deux fois le même résultat, le plus simple serais stocker les résultats déjà trouvé dans un tableau et de tester si ce que tu viens de trouver existe déjà.
Une collection avec une gestion d'erreur peut être une solution mais pas la plus facile, reste sur un tableau
J'ai pas envie de faire le travail a ta place, si tu galère sur le test on verra ensemble. Commence ton code et montre le nous (avec les balise code)
ensuite on le corigera s'il le faut
Salut,
Un exemple :
++
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 Option Explicit Sub TrouveMultiple() Dim ValeurCible As Variant Dim Cpt1 As Long, Cpt2 As Long Feuil1.Cells.Clear ValeurCible = InputBox("Valeur cible") If IsNumeric(ValeurCible) Then Application.ScreenUpdating = False For Cpt1 = 1 To ValeurCible For Cpt2 = 1 To ValeurCible If Cpt1 * Cpt2 = ValeurCible Then Feuil1.Range("A" & Feuil1.Range("A65536").End(xlUp).Row + 1).Value = Cpt1 & " X " & Cpt2 & " = " & ValeurCible End If Next Cpt2 Next Cpt1 Application.ScreenUpdating = True End If End Sub
Minick
EDIT :
Oops désolé Krovax, j'avais pas rafraichit. Je suis moins pedagogue, j'offre la solution...
Pas de problème mais par contre avec ce code tu auras des doublons, et on peut arrêter les compteur a la motié, et lcommencer a 2 en ajoutant 1xValeur dans la chaine de résultat a chaque fois. (si c'est pour un exo ca fera une meilleur noteet sinon ca tournera plus rapidement)
Du coup il a quand même un peu de travaille alors je suis content
Sinon il y a des algos vachement classe pour ce genre de truc si j'ai le temps je vais essayer d'en retrouver un
Edit : premier tips, pour éviter les doublons s'arréter au plus petit des multiple trouvé
ici on test 1, 2 3 la on trouve 4 plus besoin de tester 4 et plus
Oui effectivement il y a les doublons mais dans son exemple ils y sont donc j'ai laissé...
++
Minick
Je n'avais pas fait attention a l'exemple tu as bien raison
Mais du coup ce n'est plus rigolo du tout![]()
Partager