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 :

Copier/Coller via Range(Cells())


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
    Inscrit en
    Octobre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 17
    Par défaut Copier/Coller via Range(Cells())
    Bonjour le forum,

    Je me tourne vers vous car je séche sur une ligne de code. Lorsque je cherche à appliquer un copier/coller en définissant la sélection via Range (cells(...,...), Cells (...,...) j'obtiens une erreur de type 1004.

    Voir le code ci dessous :
    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
     
    Function copier(typpe, classeur, coldeb, bornesup, colfin, borneinf)
     
    lignedest = Range("A65536").End(xlUp).Row + 1
    If typpe = "Réalisé" Then
        coldest = 2
    ElseIf typpe = "Engagé" Then
        coldest = 13
    Else
        MsgBox "Erreur fatale"
        End
    End If
     
    Workbooks(classeur).Worksheets(1).Range(Cells(bornesup, coldeb), Cells(borneinf, colfin)).Copy _
        Destination:=ThisWorkbook.Worksheets("Détail").Range(lignedest, coldest)
     
    bas = ThisWorkbook.Worksheets("Détail").Range(65536, coldest).End(xlUp).Row
    For i = lignedest To bas
        ThisWorkbook.Worksheets("Détail").Cells(i, 1).Value = typpe
    Next i
    End Function
    A noter lorsque je fais un appel standard du type (voir ci dessous) le code marche nickel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(classeur).Worksheets(1).Range("A6 : L7").Copy _
        Destination:=ThisWorkbook.Worksheets("Détail").Range("B2")
    J'espère que vous saurez m'aider. Je vous remercie en tout par avance du coup de main.

    A+

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(lignedest, coldest)
    Je ne suis pas expert mais le problème viens de là je pense.

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(cells(lignedest, coldest))

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 17
    Par défaut
    Bien vu halaster08

    J'ai en effet un problème à ce niveau la mais ça ne marche toujours pas.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Ok je viens de tester vite fait, apparemment il faut tes range aient la meme taille donc remplacer le dernier range par un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(lignedest, coldest), Cells(lignedest + borneinf - bornesup, coldest + colfin - coldeb)
    edit: non en fait c'est pas un problème de taille, c'est juste qu'un range avec cells doit avoir deux arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(lignedest, coldest), Cells(lignedest , coldest))
    devrait marcher aussi

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 17
    Par défaut
    Merci pour ton aide mais je reviens toujours avec mon erreur 1004... Je pense que l'erreur est plutôt dans la philosophie du range. Y a un truc de j'ai pas du saisir/voir.

  6. #6
    Invité
    Invité(e)
    Par défaut
    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
     
    Function copier(typpe, classeur, coldeb, bornesup, colfin, borneinf)
     
    lignedest = Range("A65536").End(xlUp).Row + 1
    If typpe = "Réalisé" Then
        coldest = 2
    ElseIf typpe = "Engagé" Then
        coldest = 13
    Else
        MsgBox "Erreur fatale"
        End
    End If
     
    Workbooks(classeur).Worksheets(1).Range(Cells(bornesup, coldeb),Cells[/B](borneinf, colfin)).Copy _
        Destination:=ThisWorkbook.Worksheets("Détail").cells(lignedest, coldest)
     
    bas = ThisWorkbook.Worksheets("Détail").Range(65536, coldest).End(xlUp).Row
    For i = lignedest To bas
        ThisWorkbook.Worksheets("Détail").Cells(i, 1).Value = typpe
    Next i
    End Function
    et si il n'est pas trouvé d’occurrence? quelle valeur prend coldest ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If typpe = "Réalisé" Then
        coldest = 2
    ElseIf typpe = "Engagé" Then
        coldest = 13
    Else
        MsgBox "Erreur fatale"
        End
    End If

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    C'est étonnant, j'ai tester cette formule sur un petit carré 2x2 en remplacant tes variables par des nombres et je n'ai pas eu d'erreur 1004.
    Peut être as-tu un problèmes au niveau de l'une des variables qui serait mal reseignée avant l'exécution du copier/coller.

    voila la formule de test que j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Worksheets("Sheet2").Range(Cells(1, 1), Cells(2, 2)).Copy _
        Destination:=ThisWorkbook.Worksheets("Sheet2").Range(Cells(3, 3), Cells(3, 3))

  8. #8
    Membre chevronné
    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
    Par défaut
    bonjour,

    essayez comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destination:=ThisWorkbook.Worksheets("Détail").Cells(lignedest, coldest)

  9. #9
    Expert éminent
    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
    Par défaut
    Bonjour, bonjour !

    Soit le modèle objet d'Excel n'est pas respecté soit le contenu des variables est faux (simple à vérifier !) …

    Dans l'hypothèse de variables correctes, voilà pourquoi le modèle objet n'est pas respecté :

    dans la ligne n°14 du code initial si la feuille Workbooks(classeur).Worksheets(1) n'est pas celle active

    cette ligne n°14 n'a aucun sens car il manque devant chaque Cells la référence de sa feuille ! (et du classeur …)

    Tels quels les Cells sans référence de feuille de calculs pointent donc sur la feuille active !

    Alors qu'en utilisant une variable objet pour la feuille ou juste en verrouillant la feuille de calculs via un bloc With
    (et sans oublier la grossière erreur quant à la destination !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With Workbooks(classeur).Worksheets(1)
            Range(.Cells(bornesup, coldeb), .Cells(borneinf, colfin)).Copy _
            ThisWorkbook.Worksheets("Détail").Cells(lignedest, coldest)
        End With
    Avec toutes ces erreurs corrigées si cela ne fonctionne toujours pas, il serait temps de vérifier les variables
    voir la logique du code …

    Voilà, voilà !

    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/03/2014, 21h17
  2. [XL-2007] Copier-coller via TextBox
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/05/2012, 08h37
  3. recherche dans une base de donnees; copier coller via une macro
    Par yannlvr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2010, 17h58
  4. Réponses: 2
    Dernier message: 01/08/2007, 15h46
  5. Réponses: 2
    Dernier message: 09/05/2006, 23h13

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