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 :

Problème ByRef, argument incompatible


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut Problème ByRef, argument incompatible
    Bonjour à toutes et à tous,

    Un peu à l'image de ce que j'ai déjà pu poster sur ce forum (http://www.developpez.net/forums/d11...ion-variables/), me voici de nouveau confronté à ce type de problème.

    Je cherche à simplifier mon code, qui a la gueule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For Each cel In Worksheets(3).Range("I" & 11 + nprec & ":I" & 11 + n - 1)
    If cel.Value = Range("H3").Value Then
            With Worksheets(4)
                If ind Mod (3) <> 0 Or ind = 0 Then
                    .Range("F18").Offset(ind * 4 + 2 * ind2, 0).Value = .Range("F18").Offset(ind * 4 + 2 * ind2, 0).Value + cel.Offset(0, -1).Value
                    test = False
                Else
                    .Range("F18").Offset(ind * 4 + 2 * ind / 3, 0).Value = .Range("F18").Offset(ind * 4 + 2 * ind / 3, 0).Value + cel.Offset(0, -1).Value
                    test = True
                End If
            End With
    ElseIf cel.Value = Range("H4").Value Then     
    ...
    en un code plus sympa, du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        For Each cel In Worksheets(3).Range("I" & 11 + nprec & ":I" & 11 + n - 1)
            If cel.Value = Range("H3").Value Then 
                test = exporterValeurs(Range("F18"), cel, ind, ind2)
            ElseIf cel.Value = Range("H4").Value Then  
                test = exporterValeurs(Range("H18"), cel, ind, ind2)
            ElseIf cel.Value = Range("H5").Value Then    
            ....
    grâce à la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function exporterValeurs(destin As Range, exped As Range, ind As Integer, ind2 As Integer) As Boolean
        With Worksheets(4)
            If ind Mod (3) <> 0 Or ind = 0 Then
                .destin.Offset(ind * 4 + 2 * ind2, 0).Value = .destin.Offset(ind * 4 + 2 * ind2, 0).Value + exped.Offset(0, -1).Value
                exporterValeurs = False
            Else
                .destin.Offset(ind * 4 + 2 * ind / 3, 0).Value = .destin.Offset(ind * 4 + 2 * ind / 3, 0).Value + exped.Offset(0, -1).Value
                exporterValeurs = True
            End If
        End With
    End Function
    Lors de l'éxécution, Excel affiche l'erreur "Type d'argument ByRef incompatible" au niveau de l'argument "cel" de la fonction "exporterValeurs" de mon code "sympa".

    J'ai beau retourner le problème dans tous les sens, je n'arrive pas à saisir pourquoi mes modifications ne sont pas équivalentes au code que j'avais rédigé en premier lieu.

    Une explication ?

    Merci d'avance pour vos idées

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Réponse à moi même : la déclaration de cel se faisait via la ligne
    il semblerait que le problème soit résolu en la remplaçant par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim cel as range
    dim cel2 as range
    Pas très logique à mon sens, si quelqu'un pouvait m'expliquer le pourquoi du comment

    Une erreur se produit désormais à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .destin.Offset(ind * 4 + 2 * ind2, 0).Value = .destin.Offset(ind * 4 + 2 * ind2, 0).Value + exped.Offset(0, -1).Value
    et indique "Propriété ou méthode non gérée par cet objet"

    Je ne vois qu'offset qui pourrait ne pas fonctionner..?
    D'avance, merci encore

  3. #3
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    J'avoue que je n'ai jamais compris pourquoi ça faisait ça et la première fois, avant de comprendre ce qui se passe, ça peut être long. Tu as été rapide, je n'ai pas eu le temps de répondre
    Pour ton autre problème, le range que tu passes en paramètre correspond déjà à une worksheet, donc pas la peine de faire un With Worksheets(4)

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    En effet, si je passe Worsheet(4).Range("F18") en argument, plus besoin du With et ça fonctionne nickel.. Merci

  5. #5
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Ca aurait marché même si tu n'avais pas passé Worksheets(4) dans l'argument, mais tu as raison de le faire, sinon le Range("F18") aurait été celui de la feuille active, qu'on ne maîtrise pas toujours.
    Désolé si ça te parait évident, mais je voulais être sûr que tu avais bien compris qu'un range appartenait de toute façon à une feuille.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Effectivement, merci pour la précision

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

Discussions similaires

  1. Problème de "Type incompatible" avec tableau et Vector
    Par pat-trix dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 07/07/2006, 23h42
  2. [access 2003]Problème avec argument de bouton?
    Par steeves5 dans le forum Access
    Réponses: 2
    Dernier message: 30/05/2006, 16h45
  3. histoire de fonction avec problème sur arguments
    Par bébé dans le forum Langage
    Réponses: 5
    Dernier message: 07/01/2006, 11h29
  4. [Tableaux] Problème invalid argument foreach()
    Par kcizth dans le forum Langage
    Réponses: 9
    Dernier message: 05/01/2006, 11h56
  5. Problème de fréquence incompatible dans un Report
    Par Aeternus dans le forum Reports
    Réponses: 6
    Dernier message: 14/12/2004, 15h34

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