Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres chalenge 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 !

patricktoulon

XLDnaute Barbatruc
salut à tous
je doit créer des Ids une par une avec un bouton ou créer a la chaine tout un paquet d'id sans faire de doublons à coup sur
le chalenge c'est de faire sans RND
et pour couronner le tout la seule donnée disponible que l'on peut utiliser c'est le nombre d'id déjà créés

je donnerais ma méthode quand il y aura eu quelques participations

les condition d’élaborations pour la fonction
  1. ne doit pas faire appel a la fonction RND
  2. ne doit pas faire appel a un name ou registre ou toute autre source de memoring
  3. elle doit s'auto suffire
  4. et le must si je transfert cette fonction dans un autre classeur( et même plus loin , autre pc) elle ne doit pas créer des id déjà crées au par avant
 
Dernière édition:
Solution
re
@Oui sylvanu c'est juste pour te montrer que le moteur va (difficile de calculer tu prend un peu plus d'une seconde pour 100 je prends 0.6xxx pour 60 000

mais dans tout les cas personne n'a trouver l'astuce pour justement ne pas retirer les même
alors je vous le dis
la chose et simple la fonction réécrit son propre ADN
Code:
'+------------------------------------------------------------+
'¦                        PATRICKTOULON                       ¦
'¦                   collection fonction perso DNA            ¦
'¦   FONCTION AUTOSUFFISANTE PATRICKIENNE — VERSION 1.0       ¦
'¦ Cette fonction est vivante.Elle réecrit son propre ADN.   ¦
'¦ Elle ne dépend de rien. Il ne laisse rien derrière ELLE.   ¦
'¦ Elle est unique...
Bonjour à tous
et pour augmenter la difficulté
je dois avoir la possibilité de fermer le fichier et le rouvrir a volonté sans qu'il y ai la possibilité de retomber sur un id déja créé
et je dois puvaoir copier coller cette fonction ou sub dans n'importe quel fichier et la aussi je ne dois pas avoir la possibilité de retomber sur un id déjà créé
 
Bonjour Patrick,
Comme il faut bien se lancer, un essai en PJ basé sur une variable Now+Timer qui donne une variable dont la valeur ne peut se répéter.
Discutable Ô combien car impossible de prouver l'unicité en particulier avec l'hypothèse :
je dois pouvoir copier coller cette fonction ou sub dans n'importe quel fichier et la aussi je ne dois pas avoir la possibilité de retomber sur un id déjà créé
Est ce que l'ID product est considéré dans la rubrique "ne doit pas faire appel a un name ou registre ou toute autre source de memoring" ?
 

Pièces jointes

Bonjour à tous😉,

Pas certain d'avoir compris la question 🤨.

et pour couronner le tout la seule donnée disponible que l'on peut utiliser c'est le nombre d'id déjà créés
Si on connait le nombre d'IDs déjà créés alors le nombre d'ID est lui-même l'ID, non ?

Sur ce principe une macro. On a rajouté une lettre au début juste pour faire joli😄.
VB:
Sub TEST()
Const Lettres = "ABCDEFGHJKMNPRSTUWXYZ"
Dim DejaCree&, rep&, IDs, i&
   DejaCree = [d2]
   rep = Int(Val(Application.InputBox("Nombre de ID à créer: ?", , 1, Type:=1)))
   If rep > 0 Then
      ReDim IDs(1 To rep, 1 To 1)
      For i = 1 To rep: IDs(i, 1) = Mid(Lettres, 1 + i Mod Len(Lettres), 1) & Format(DejaCree + i, String(15, "0")): Next
      Cells(Rows.Count, "a").End(xlUp).Offset(1).Resize(UBound(IDs)) = IDs
   End If
End Sub
 

Pièces jointes

Bonjour tout les deux
@sylvanu
c'est pas mal du tout on est dépendant timer qui donne le même tout les jour a la même heure je suis pas sur que x même si le nombre est grand qu'il n'y ai pas de possibilité de doublon

@mapomme ça j'aurais pu le faire
je m'attendais a plus tordu venant de toi 😉 🤣 🤣

et vous avez oublié un détail important
c'est qu'un copier coller dans un module d'un autre classeur réinitialisera les compteurs


j'ai bien l'api CoCreateGuid mais je trouvais plus amusant de proposer ce chalenge vba et uniquement vba

je répète donc

les condition d’élaborations pour la fonction
  1. ne doit pas faire appel a la fonction RND
  2. ne doit pas faire appel a un name ou registre ou toute autre source de mémoring(cellule ou autre)
  3. elle doit s’ auto suffire
  4. et le must si je transfert cette fonction dans un autre classeur( et même plus loin , autre pc) elle ne doit pas créer des id déjà crées au par avant
le type de chaine m'importe peu tant que ça fait au moins 12/15 caractères et/ou plus (30 max sinon c'est des romans )
le point 4 est en rouge car c'est un point important

j'attends que vous me disiez le mot 🙃🤣🙃🤣
 
@mapomme ça j'aurais pu le faire
je m'attendais a plus tordu venant de toi 😉 🤣 🤣
Et pour une fois que je fais dans le simple et le trivial, on me renvoie dans mes foyers. Je boude 😠.

En passant, j'ai d'emblée écarté les méthodes basées sur la date et le temps car comme le machin doit être exécutable sur n'importe quelle machine, on ne peut pas affirmer que la même date et heure ne figurent pas sur un autre PC ou MAC à un autre autre instant quelque part dans le monde... Je me suis peut-être fourvoyé.
 
j'ai bien l'api CoCreateGuid mais je trouvais plus amusant de proposer ce chalenge vba et uniquement vba
Salut,
c'est effectivement ce que j'aurais utilisé :
Nullosse
 
bon je vous donne deux indices
indice 1: 01/01/100
indice 2: ADN
🤣 🤣 🤣
pour info @sylvanu 1.3xx chez moi ta fonction

la mienne 0.0115xx pour 10 Id mais c'est pas le même type de chaine
voici le type de chaine même si c'est pas une condition du chalenge
je vous previens c'est tordu hein 🤣🤣
 
@sylvanu
fait tourner une simple boucle for en vba sur now tu va voir si ça se répète pas et même avec timer
les 10 tours ne dépasse pas un seul ticks du coup ben ..........
VB:
Sub test()
 For i = 1 To 10
 Debug.Print Now & "-" & Timer
Next
End Sub
 
Timer effectivement se répète chaque jour, par définition.
Now+Timer ne se répètent jamais. 🙂
Bonsoir Sylvanu 😉 ,
Comme je disais, on n'est sûr de rien puisqu'on ballade la macro sur différentes machines qui peuvent avoir des dates et l'heure identiques à des instants différents.
Personne ne peut assurer que la date et l'heure sur deux bécanes sont différentes à différents moments. Tout comme deux montres.
Il faut donc qu'avec exactement la même date et heure, l'ID résultant soit différent, me semble-t-il ?
 
@sylvanu
fait tourner une simple boucle for en vba sur now tu va voir si ça se répète pas et même avec timer
les 10 tours ne dépasse pas un seul ticks du coup ben ..........
Ce n'est pas bien grave. Une boucle infinie Do...Loop permet d'ôter les doublons de date et heures (mais sur la même bécane - et encore ne faut-il pas, par exemple, revenir à une date passée - or on n'a aucun contrôle sur ce que fait l'utilisateur au niveau des réglages de la date et de l'heure sur sa bécane) :
VB:
Sub test()
Dim T1#, T2#
   For i = 1 To 1000
      Do
         T2 = Timer
         If T2 <> T1 Then Debug.Print Date & "-" & CDbl(Timer): T1 = T2: Exit Do
      Loop
   Next
End Sub
 
Dernière édition:
- 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
0
Affichages
560
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…