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 :

Convertir une macro en fonction


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Convertir une macro en fonction
    Bonjour,
    Je cherche a convertir une macro en fonction.
    Loin d'etre un pro de la programmation, j'aurai besoin d'un coup de main ...
    La macro fonctionne, mais quand j'essaye de la convertir, j'ai une erreur "#valeur!"
    Pour info, la macro calcul le CRC16 d'une table de caracteres.
    Ci dessous le code "transformé"

    D'avance, merci de votre aide !

    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
    22
    23
    24
    25
    26
    27
    28
    29
    '-------------------------------------------------
    Public Function ModCRC(Buffer() As Variant) As Long
    '-------------------------------------------------
     
    Dim CRC1 As Variant
    Dim J As Integer
    Dim K As Long
    Dim c As Long
    Dim l As Long
     
    Application.Volatile
     
    CRC1 = &HFFFF ' init CRC
    For l = 1 To UBound(Buffer) ' pour chaque mot (2 octets par mot)
        c = 1 ' init index colonne
        While c < 3
            CRC1 = CRC1 Xor Buffer(l, c)
                For J = 0 To 7 ' pour chaque bit dans l'octet
                    K = CRC1 And 1 ' memorisation du bit de poid faible
                    CRC1 = ((CRC1 And &HFFFE) / 2) And &H7FFF ' decalage à droite apres masquage du bit de poid faible
                    If K > 0 Then CRC1 = CRC1 Xor &HA001
                Next J ' bit suivant
            c = c + 1
        Wend
    Next l ' mot suivant
     
    ModCRC = CRC1
     
    End Function

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    pour une fonction personnelle, il faudrait lui passer une plage de cellules (Range)

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Mais avec un range, la plage de cellule est definie ... alors que je voudrai pouvoir passer une plage de taille variable ...

  4. #4
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    a moins que je dise grosse betise, la plage d'un range peut être aléatoire en mettant une variable par exemple i et mettre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i=1 to 10
    Sheets("feuil1").Range("b" & i)
    Merci de cliquer sur pour chaque message vous ayant aidé
    puis sur pour clore cette discussion …

    C'est en récoltant les cailloux qu'on te jette que tu construiras ta future estrade...

  5. #5
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Je partirais sur quelque chose comme ça
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    '-------------------------------------------------
    Public Function ModCRC(plageBuffer as Range) As Long
    '-------------------------------------------------
     
    Dim CRC1 As Variant
    Dim J As Integer
    Dim K As Long
    Dim c As Long
    Dim l As Long
    Dim Buffer As Variant
     
    Application.Volatile
     
    Buffer = plageBuffer.Value
     
    CRC1 = &HFFFF ' init CRC
    For l = 1 To UBound(Buffer,1) ' pour chaque mot (2 octets par mot)
        c = 1 ' init index colonne
        While c < 3
            CRC1 = CRC1 Xor Buffer(l, c)
                For J = 0 To 7 ' pour chaque bit dans l'octet
                    K = CRC1 And 1 ' memorisation du bit de poid faible
                    CRC1 = ((CRC1 And &HFFFE) / 2) And &H7FFF ' decalage à droite apres masquage du bit de poid faible
                    If K > 0 Then CRC1 = CRC1 Xor &HA001
                Next J ' bit suivant
            c = c + 1
        Wend
    Next l ' mot suivant
     
    ModCRC = CRC1
     
    End Function

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    L'idee me paraissait bonne, mais j'ai le meme message d'erreur ( #valeurs )

Discussions similaires

  1. lancer une macro en fonction de la valeur d'une cellule
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/06/2008, 17h18
  2. Convertir une macro vb en .exe
    Par cocotte06 dans le forum Windows
    Réponses: 3
    Dernier message: 19/03/2008, 14h54
  3. convertir une macro en code vba
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/12/2007, 23h54
  4. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13
  5. [Macro] Exécuter une macro en fonction d'un contrôle
    Par sugan dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2006, 16h02

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