XL 2010 Erreurs macro code machine pour PC unique

Orson83

XLDnaute Impliqué
Bonjour le forum,
J'ai récupéré une macro très intéressante qui permet d'enregistrer le numéro du disque dur dans une cellule et de reconnaître l'ordinateur sur lequel le fichier a été ouvert. Un grand merci à Chris24 pour cette contribution ;)
L'idée c'est que le fichier ne puisse pas fonctionner avec un autre utilisateur (autre ordinateur) car le code machine sera différent.
Cependant, je rencontre quelques petits problèmes que je ne parviens pas à résoudre car je ne maîtrise pas assez bien le codage, pourtant j'ai essayé :(
- J'ai une erreur d'exécution VBA 1004 > La méthode 'Range' de l'objet'_Global' a échouée (cela se produit à la première ouverture où si le fichier a été dupliqué pour le même PC)
Pour l'adapter à mon utilisation, serait-il possible de ? :
- Supprimer l'enregistrement automatique si pas la bonne machine (dans tous les cas)
- Annuler l'ouverture des Feuilles si ordinateur OK (onglets comme à la fermeture d'Excel)
- Supprimer toutes les msgbox sauf "Ce fichier ne peut pas fonctionner pas sur cet ordinateur"
- Et si ce n'est pas le bon PC, alors juste fermer les onglets et fermer Excel sans détruire les pages de façon que le fichier puisse être réutilisable sur le PC d'origine
Je sais que ça fait beaucoup de demandes et je vous remercie par avance de me donner un coup de pouce 👍
Je joins un fichier exemple dans ce post.
Tchotchodu31
 

Pièces jointes

  • Code machine V1.xlsm
    25.5 KB · Affichages: 23
Solution
C
Bonjour eriiiic,
Merci pour ta contribution. J'ai inséré la détection du système avec Environ("HOMEDRIVE") et ça a l'air de fonctionner.
Petit problème si je supprime ou modifie la partie du code qui sert à l'encodage XOR, ça plante.
Si tu pouvais me donner un coup de main sur cette partie du code ;) Merci.
Mon fichier modifié attaché.
Bonjour Tchotchodu31

To codage est complètement erroné :eek:
Environ() est une fonction VBA intégrée, tu ne dois pas l'utiliser pour en faire une fonction personnalisée 😲

Voici le fichier avec code modifié + un module pour une autre façon de trouver els numéro de série
C

Compte Supprimé 979

Guest
Bonjour Tchotchodu31

Je pense que vous rêvez de vouloir empêcher l'utilisation d'un classeur Excel partout ou l'on veut 🤣

Ceci dit, voici le code modifié, d'après votre demande et vu le code, je pense qu'une bone formation au VBA est nécessaire.... :rolleyes:
 

Pièces jointes

  • Code machine V1a.xlsm
    21.9 KB · Affichages: 8

Orson83

XLDnaute Impliqué
Bonjour Tchotchodu31

Je pense que vous rêvez de vouloir empêcher l'utilisation d'un classeur Excel partout ou l'on veut 🤣

Ceci dit, voici le code modifié, d'après votre demande et vu le code, je pense qu'une bone formation au VBA est nécessaire.... :rolleyes:
Bonjour BrunoM45, le forum,
Merci pour ces modifications. Je reconnais que mon niveau en VBA n'est pas Top, mais j'en apprends tous les jours.
Effectivement, je ne pense pas que ce fichier soit inviolable mais j'espère juste limiter la duplication car j'ai passé presque 2 ans à le réaliser.
Je vois juste un petit soucis à l'ouverture. Si il est vierge de code machine, à la première ouverture, le fichier s'ouvre et se referme immédiatement. Après, il fonctionne correctement à la deuxième ouverture.
Je me posais aussi la question de savoir si un utilisateur légitime avait son Windows sur le lecteur "D" par exemple, que se passerai t-il ? Peut-être que si le code désignait les lecteurs "C" ou "D" ou "E" ou "F" cela éviterait un plantage ?
Tchotchodu31
 

eriiic

XLDnaute Barbatruc
Bonjour,

tu peux connaitre le disque système avec
VB:
Environ("HOMEDRIVE")

Bruno, j'ai utilisé cette méthode récemment (avec XOR) et je me suis aperçu d'un soucis.
Il ne faut pas crypter les caractères donnant 0 en résultat. Ca raccourci la chaine résultat.
J'ai dû aussi strapper ceux donnant 4, 10, 13, 34 pour difficulté à copier-coller la chaine cryptée pour initialiser une variable. A titre info, je n'ai pas l'impression pas que ça joue ici.
eric
 

Orson83

XLDnaute Impliqué
Bonjour,

tu peux connaitre le disque système avec
VB:
Environ("HOMEDRIVE")

Bruno, j'ai utilisé cette méthode récemment (avec XOR) et je me suis aperçu d'un soucis.
Il ne faut pas crypter les caractères donnant 0 en résultat. Ca raccourci la chaine résultat.
J'ai dû aussi strapper ceux donnant 4, 10, 13, 34 pour difficulté à copier-coller la chaine cryptée pour initialiser une variable. A titre info, je n'ai pas l'impression pas que ça joue ici.
eric
Bonjour eriiiic,
Merci pour ta contribution. J'ai inséré la détection du système avec Environ("HOMEDRIVE") et ça a l'air de fonctionner.
Petit problème si je supprime ou modifie la partie du code qui sert à l'encodage XOR, ça plante.
Si tu pouvais me donner un coup de main sur cette partie du code ;) Merci.
Mon fichier modifié attaché.
 

Pièces jointes

  • Code machine V2 Homedrive.xlsm
    26.3 KB · Affichages: 3

eriiic

XLDnaute Barbatruc
Bonjour,

je vais laisser bruno continuer ce qu'il a fait.
Je viens de voir qu'il utilisait déjà Environ() dans la V1a dans test2()...
C'est plutôt au niveau de sDrive qu'il faut jouer. Il utilise GetVolumeInformation à la place et je pense que ta question n'avait pas lieu d'être.

Et il faut laisser CalculPW = Res que la fonction personnalisée retourne sa valeur.

Il ne reste qu'à voir s'il juge utile d'éliminer le 0 qui peut apparaître dans la chaine cryptée
eric
 
Dernière édition:
C

Compte Supprimé 979

Guest
Bonjour eriiiic,
Merci pour ta contribution. J'ai inséré la détection du système avec Environ("HOMEDRIVE") et ça a l'air de fonctionner.
Petit problème si je supprime ou modifie la partie du code qui sert à l'encodage XOR, ça plante.
Si tu pouvais me donner un coup de main sur cette partie du code ;) Merci.
Mon fichier modifié attaché.
Bonjour Tchotchodu31

To codage est complètement erroné :eek:
Environ() est une fonction VBA intégrée, tu ne dois pas l'utiliser pour en faire une fonction personnalisée 😲

Voici le fichier avec code modifié + un module pour une autre façon de trouver els numéro de série
 

Pièces jointes

  • Code machine V2a.xlsm
    29.4 KB · Affichages: 7

Orson83

XLDnaute Impliqué
Bonjour Tchotchodu31

To codage est complètement erroné :eek:
Environ() est une fonction VBA intégrée, tu ne dois pas l'utiliser pour en faire une fonction personnalisée 😲

Voici le fichier avec code modifié + un module pour une autre façon de trouver els numéro de série
Bonjour BrunoM45, eriiiic, le forum,
Cette version qui détecte le disque me semble très bien, merci pour ce travail.
Mais il y a plantage dans le ThisWorkBook sur le Stop. Une fois débogué, Excel se ferme.
Il semblerait que la macro ne gère que Windows 32 bits ?
François
 

soan

XLDnaute Barbatruc
Inactif
@Tchotchodu31

Bonjour François,

excuse-moi ; c'que j'ai écrit dans mon post #8 est juste pour le jeu de mots entre la fonction Environ() et un code VBA approximatif ; je n'ai pas cherché à me moquer de toi, et on a tous été débutant au départ, moi y compris ; et moi aussi, j'ai mes limites et j'apprends de mes erreurs ; c'est comme ça qu'on progresse. :)

je plussoie Bruno quand il dit qu'il ne faut pas nommer une fonction personnalisée avec un nom de fonction de VBA qui existe déjà ; j'ajoute : ni avec un mot clé (keyword) de VBA (je veux dire : même si ce keyword n'est pas un nom de fonction).

pour ce qui est de participer à la résolution de cet exo, je préfère laisser les autres intervenants de cette conversation poursuivre, car ils sont bien plus calés que moi là-dessus ; bonne chance ! 🍀

soan
 

Orson83

XLDnaute Impliqué
@Tchotchodu31

Bonjour François,

excuse-moi ; c'que j'ai écrit dans mon post #8 est juste pour le jeu de mots entre la fonction Environ() et un code VBA approximatif ; je n'ai pas cherché à me moquer de toi, et on a tous été débutant au départ, moi y compris ; et moi aussi, j'ai mes limites et j'apprends de mes erreurs ; c'est comme ça qu'on progresse. :)

je plussoie Bruno quand il dit qu'il ne faut pas nommer une fonction personnalisée avec un nom de fonction de VBA qui existe déjà ; j'ajoute : ni avec un mot clé (keyword) de VBA (je veux dire : même si ce keyword n'est pas un nom de fonction).

pour ce qui est de participer à la résolution de cet exo, je préfère laisser les autres intervenants de cette conversation poursuivre, car ils sont bien plus calés que moi là-dessus ; bonne chance ! 🍀

soan
Merci soan 👍
Très bon dimanche ;)
 

Discussions similaires

Réponses
2
Affichages
272
Réponses
2
Affichages
111

Statistiques des forums

Discussions
312 109
Messages
2 085 383
Membres
102 878
dernier inscrit
asmaa