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 :

Fonction qui renvoit les multiples d'un nombre!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut Fonction qui renvoit les multiples d'un nombre!
    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!

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    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
    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
    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
    Tu boucle sur tout les entiers entre
    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

  3. #3
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par dé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...

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    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 note et 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

  5. #5
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Oui effectivement il y a les doublons mais dans son exemple ils y sont donc j'ai laissé...

    ++
    Minick

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Je n'avais pas fait attention a l'exemple tu as bien raison

    Mais du coup ce n'est plus rigolo du tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction qui renvoit les coefficients d'un polynôme
    Par lisenette dans le forum MATLAB
    Réponses: 7
    Dernier message: 31/03/2014, 13h35
  2. [XL-2003] fonction qui renvoit les coordonnées d'une cellule (As Range)
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/12/2011, 08h56
  3. Fonction qui définie les nombres des chiffres
    Par aliassaf dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/04/2009, 01h38
  4. Réponses: 4
    Dernier message: 04/05/2007, 22h49

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