XL 2016 Curiosités numériques et VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

garnote

XLDnaute Junior
Bonjour tout monde,

En souvenir de l'époque Excelabo à laquelle j'ai participé pendant quelques années avec mes folies mathématiques!
Que de beaux souvenirs, c'était fantastique! Je pense à Misange, GeeDee, Laurent Longre et bien d'autres joyeux lurons.
Salutations distinguées à tous et toutes qui ont fait mon plaisir. Ci-joint un document sur les nombres de Dudeney!
À votre avis, pourrais-je simplifier la macro nommée Cubes? Et un graphique pour sa beauté! 🙂

Aussi une question au sujet des nombres vampires 😳
1260 est un vampire parce qu'il est obtenu par le produit de 21 par 60
2187 est un vampire parce qu'il est obtenu par le produit de 27 par 81
et que chacun contient les mêmes chiffres que les deux nombres multipliés, peut importe l'ordre.

Alors, pour trouver les vampires, il me faudrait une macro permettant de savoir que, par exemple :
1260 contient les mêmes chiffres que 2160
2187 contient les mêmes chiffres que 2781

Donc, comment faire en VBA pour savoir que deux nombres contiennent exactement les mêmes chiffres,
peut importe l'ordre?
Vous avez une idée? J'ai tout tenté en utilisant Mid et InStr, mais sans succès.

Bonne fin de weekend et Vive ce nouvel environnement !

Serge
 

Pièces jointes

  • Dudeney.xlsm
    Dudeney.xlsm
    18 KB · Affichages: 19
  • Gone-22 et diagonales.PNG
    Gone-22 et diagonales.PNG
    119.6 KB · Affichages: 31
Bonjour tout monde,

En souvenir de l'époque Excelabo à laquelle j'ai participé pendant quelques années avec mes folies mathématiques!
Que de beaux souvenirs, c'était fantastique! Je pense à Misange, GeeDee, Laurent Longre et bien d'autres joyeux lurons.
Salutations distinguées à tous et toutes qui ont fait mon plaisir. Ci-joint un document sur les nombres de Dudeney!
À votre avis, pourrais-je simplifier la macro nommée Cubes? Et un graphique pour sa beauté! 🙂

Aussi une question au sujet des nombres vampires 😳
1260 est un vampire parce qu'il est obtenu par le produit de 21 par 60
2187 est un vampire parce qu'il est obtenu par le produit de 27 par 81
et que chacun contient les mêmes chiffres que les deux nombres multipliés, peut importe l'ordre.

Alors, pour trouver les vampires, il me faudrait une macro permettant de savoir que, par exemple :
1260 contient les mêmes chiffres que 2160
2187 contient les mêmes chiffres que 2781

Donc, comment faire en VBA pour savoir que deux nombres contiennent exactement les mêmes chiffres,
peut importe l'ordre?
Vous avez une idée? J'ai tout tenté en utilisant Mid et InStr, mais sans succès.

Bonne fin de weekend et Vive ce nouvel environnement !

Serge
Bonjour,
Sans oublier le regretté JPS et tant d'autres🙂
Macro cube allégée
VB:
Sub Cubes() '*****nouvelle macro
    For v = 1 To k
        n = Cells(v, 1)
        For i = 1 To Len(n)
            x = x & Mid(n, i, 1) & "+"
        Next i
        Cells(v, 2) = "= (" & Left(x, Len(x) - 1) & ")^3"
        x = ""
    Next v
End Sub
Pour la vérification de 2 nombres, cela pourrait ressembler à cela
Code:
Sub Identique()
    Dim C As Range, i&, tmp$
    With Feuil2
        .Columns(3).ClearContents
        For Each C In .Range("a1:a" & .Cells(Rows.Count, "A").End(xlUp).Row)
            If Len(C.Offset(, 1)) > Len(C) Then tmp = C.Offset(, 1): C.Offset(, 1) = C: C = tmp
            For i = 1 To Len(C)
                If InStr(C.Offset(, 1), Mid(C, i, 1)) = 0 Then C.Offset(, 2) = "non conforme": Exit For
            Next
        Next
    End With
End Sub
Exemple en PJ sur une nouvelle feuille
Pour le graphique, je cède la main 🥲
 

Pièces jointes

Dernière édition:
Bonjour,
Sans oublier le regretté JPS et tant d'autres🙂
Macro cube allégée
VB:
Sub Cubes() '*****nouvelle macro
    For v = 1 To k
        n = Cells(v, 1)
        For i = 1 To Len(n)
            x = x & Mid(n, i, 1) & "+"
        Next i
        Cells(v, 2) = "= (" & Left(x, Len(x) - 1) & ")^3"
        x = ""
    Next v
End Sub
Pour la vérification de 2 nombres, cela pourrait ressembler à cela
Code:
Sub Identique()
    Dim C As Range, i&
    With Feuil2
        .Columns(3).ClearContents
        For Each C In .Range("a1:a" & .Cells(Rows.Count, "A").End(xlUp).Row)
            For i = 1 To Len(C)
                If InStr(C.Offset(, 1), Mid(C, i, 1)) = 0 Then C.Offset(, 2) = "non conforme": Exit For
            Next
        Next
    End With
End Sub
Exemple en PJ sur une nouvelle feuille
Pour le graphique, je cède la main 🥲
Merci infiniment. J'examinerai tout ça très attentivement demain. Bonne journée!
 
Bonjour,

Donc, comment faire en VBA pour savoir que deux nombres contiennent exactement les mêmes chiffres,
peut importe l'ordre?
Vous avez une idée? J'ai tout tenté en utilisant Mid et InStr, mais sans succès.

Une proposition sous forme de fonction personnalisée :
VB:
Function Vampire(Texte_1, Texte_2)
    Vampire = "Pas vampire"
    If Len(Texte_1) = Len(Texte_2) And Len(Texte_1) > 0 Then
        For x = 1 To Len(Texte_1)
            CarX = Mid(Texte_1, x, 1)
            If InStr(Texte_2, CarX) = 0 Then Exit Function
            Texte_2 = Replace(Texte_2, CarX, "", 1, 1)
        Next x
        Vampire = "V A M P I R E   !"
    End If
End Function
 
Dernière édition:
Bonjour à @garnote 🙂,@Jacky67 😉, @TooFatBoy 😉

Bonjour une petite fonction personnalisée.
On ne distingue pas les nombres positifs des négatifs (le signe n'étant pas un chiffre) 😉.
Si un des arguments n'est pas un entier on retourne une erreur.

VB:
Function JaiLesMemes(ByVal n1&, ByVal n2&) As Boolean
Dim s1, s2, i
   s1 = Trim(Abs(n1)): s2 = Trim(Abs(n2))
   If Len(s1) <> Len(s2) Then Exit Function
   For i = 1 To Len(s1): s2 = Replace(s2, Mid(s1, i, 1), "", 1, 1): Next
   JaiLesMemes = s2 = ""
End Function
 

Pièces jointes

Dernière édition:
Re à tous,

Un autre fonction plus générale. Elle accepte les expressions texte ou nombre.
Elle examine si les deux expressions contiennent les mêmes chiffres sans tenir compte des autres caractères (lettres, virgule, point, signe, espace).
VB:
Function JaiLesMemes(ByVal n1, ByVal n2) As Boolean
Dim s1$, s2$, i, c$
   For i = 1 To Len(n1): c = Mid(n1, i, 1): s1 = IIf(c >= "0" And c <= "9", s1 & c, s1): Next
   For i = 1 To Len(n2): c = Mid(n2, i, 1): s2 = IIf(c >= "0" And c <= "9", s2 & c, s2): Next
   If s1 = "" Or s2 = "" Then Exit Function
   For i = 1 To Len(s1): s2 = Replace(s2, Mid(s1, i, 1), "", 1, 1): Next
   JaiLesMemes = (s2 = "")
End Function
 

Pièces jointes

Dernière édition:
Bonjour à Jacky67, TooFatBoy, mapomme et Victor 21,

Ouf! grosse matinée à Québec. 🙂
Merci pour ces si belles suggestions. De belles heures d'étude en vue.
J'ai utilisé la première version de la Function Vampire(Texte_1,Texte_2)
de TooFatBoy pour chercher les 7 nombres vampires à 4 chiffres.

Désolé pour la défaite de Gasquet face au monstre Nadal! 😉

Bonne journée!
Serge
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
414
Retour