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 :

Méthode Intersect - Erreur(5) argument ou appel de procédure incorrect [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    commercant
    Inscrit en
    Avril 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : commercant

    Informations forums :
    Inscription : Avril 2018
    Messages : 17
    Par défaut Méthode Intersect - Erreur(5) argument ou appel de procédure incorrect
    Bonjour je souhaite executer une action ou appeler une procedure uniquement SI la cellule active est en [A1] ou [D1]. Mais je suis bloqué en ligne 7.
    "Erreur(5) argument ou appel de procédure incorrect"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim plage As Range, plage_depart As Range, cellule As Range
     
    Sub procedure()
    Set plage_depart = Application.Union(Range("a1"), Range("d1"))
     
        If Not Application.Intersect(cellule, plage_depart) Is Nothing Then
            MsgBox "la cellule active est en [A1] ou [D1]"
            'SOUS procedure
        End If
    End Sub
    Pouvez vous m'aider ?

    cordialement

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    1) Tu n'as pas défini Cellule.
    2) Limites la portée des variables au strict nécessaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Sub procedure()
    Dim plage As Range
      Set plage = Application.Union(Range("a1"), Range("d1"))
      If Not Application.Intersect(ActiveCell, plage) Is Nothing Then
        MsgBox "la cellule active est en " & ActiveCell.Address(False, False)
        'SOUS procedure
      End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    commercant
    Inscrit en
    Avril 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : commercant

    Informations forums :
    Inscription : Avril 2018
    Messages : 17
    Par défaut
    merci beaucoup

  4. #4
    Membre averti
    Homme Profil pro
    commercant
    Inscrit en
    Avril 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : commercant

    Informations forums :
    Inscription : Avril 2018
    Messages : 17
    Par défaut
    J'ai crié victoire un peu vite....mais on y est presque...
    Le Projet avance et je souhaite copier/coller des donnes grace à 2 procedures...
    Il n y a pas d'erreurs, MAIS aucune données n'est recuperée dans la variable "Donnees" ?
    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
     
    Option Explicit
    Dim donnees As Range
     
    Sub COPIER()
    Dim donnees As Range
    'Definition de la plage de DONNNESS à copier
    Set donnees = ThisWorkbook.ActiveSheet _
    .Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column).Offset(4, 1))
    End Sub
     
    Sub COLLER()
    Dim plage As Range
    Set plage = Application.Union(Range("a1"), Range("d1"))
    ThisWorkbook.ActiveSheet.Protect Password:="", userinterfaceonly:=True
    COPIER
     
    If Not Application.Intersect(ActiveCell, plage) Is Nothing Then
        donnees.Copy
        ActiveCell.PasteSpecial Paste:=xlPasteValues
    End If
    End Sub
    En remarque à ton observation précédente, j'ai volontairement déclaré ma variable "Donnees" en dehors pour étendre sa portée à toutes les procédures du module ?

  5. #5
    Membre averti
    Homme Profil pro
    commercant
    Inscrit en
    Avril 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : commercant

    Informations forums :
    Inscription : Avril 2018
    Messages : 17
    Par défaut
    remarque activeCell n'est pas le meme en COPIER que en COLLER

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    RE,

    Avec VBA, il est déconseillé d'utiliser Activesheet et Activecell
    Il est très largement préférable de désigner clairement l'objet exemple Worksheets("Feuil1") ou Worksheets("Feuil1").Range("A1").
    Pour copier, il vaut mieux éviter de passer par le presse-papier de Windows (Copy puis Paste ou PasteSpecial) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim r As Range
    Dim c As Range
      Set r = Worksheets("Feuil1").Range("A1:D20") ' Plage source
      Set c = Worksheets("Feuil2").Range("B12")    ' Cellule destination
      ' Pour tout copier :
      r.Copy Destination:=c
      ' Ou pour copier uniquement les valeurs :
      c.Resize(r.Rows.Count, r.Columns.Cont).Value = r.Value

  7. #7
    Membre averti
    Homme Profil pro
    commercant
    Inscrit en
    Avril 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : commercant

    Informations forums :
    Inscription : Avril 2018
    Messages : 17
    Par défaut
    merci pour la reponse , en fait plages(donnees source) on toujours la meme dimension donc la c'est simple.
    par contre le point de depart de la plge à "COPIER"
    et le point d'arrivée de la plage à "COLLER" sont varriable (d'ou le activeCell).
    finallement j'ai resolu le probleme
    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
     
    Option Explicit
    Dim donnees As Range
     
    Sub COPIER()
    'Definition de la plage de DONNNESS à copier
    Set donnees = ThisWorkbook.ActiveSheet _
    .Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column).Offset(4, 1))
    End Sub
     
    Sub COLLER()
    Dim plage As Range
    Set plage = Application.Union(Range("a1"), Range("d1"))
    ThisWorkbook.ActiveSheet.Protect Password:="", userinterfaceonly:=True
     
    If Not Application.Intersect(ActiveCell, plage) Is Nothing Then
        donnees.Copy
        ActiveCell.PasteSpecial Paste:=xlPasteValues
    End If
    End Sub
     
    Sub event_on()
    Application.EnableEvents = True
    End Sub
    Il fallait juste enlever le COPIER en ligne 16 puisque "Donnees" est déjà defini en SUB COPIER () !

    encore merci !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/08/2017, 12h21
  2. erreur 5 Argument ou appel de procédure incorrect
    Par GuyDuLac dans le forum VBA Access
    Réponses: 0
    Dernier message: 14/01/2016, 20h23
  3. Réponses: 4
    Dernier message: 05/01/2011, 22h28
  4. Erreur d'exécution 5 ; Argument ou appel de procédure Incorrect
    Par amirad dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/12/2009, 19h34
  5. Workbooks.Open : Erreur "Argument ou appel de procédure incorrect"
    Par Kropernic dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/07/2008, 09h49

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