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 :

(Excel 2016 Mac) Problème copier coller avec lien en VBA - faible occurrence


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut (Excel 2016 Mac) Problème copier coller avec lien en VBA - faible occurrence
    Bonjour,

    Je me permets de vous solliciter car j'ai un problème sur un projet en VBA assez bête en apparence mais que je n'arrive pas du tout à résoudre.

    J'ai donc plusieurs classeurs reliés entre eux, et une partie du code fait une copie de l'un vers l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Copie de la ligne d'infos depuis la fiche
    Workbooks(Fichier & "_" & Format(Date, "dd-mm-yyyy", vbMonday) & ".xlsm").Activate
    Workbooks(Fichier & "_" & Format(Date, "dd-mm-yyyy", vbMonday) & ".xlsm").Worksheets("Fiche").Range("A123:Q123").Copy
    'Ouverture + dévérouillage de la BDD
    Workbooks.Open Filename:=cheminbis & "BDD - Fiches KM.xlsm"
    Workbooks("BDD - Fiches KM.xlsm").Worksheets("Database").Unprotect Password:="password"
    'Collage de la ligne d'infos dans la BDD
    Workbooks("BDD - Fiches KM.xlsm").Worksheets("Database").Activate
    Workbooks("BDD - Fiches KM.xlsm").Worksheets("Database").Range("A3").End(xlDown).Offset(1, 0).Select
    Workbooks("BDD - Fiches KM.xlsm").Worksheets("Database").Paste Link:=True
    À priori pas de soucis, et d'ailleurs ça marche plutôt bien.

    Seulement une fois sur cinq (environ), j'obtiens le message "erreur d'exécution 1004 la méthode paste de la classe worksheet a échoué" avec la dernière ligne du code ci-dessus surlignée.

    Je ne comprends vraiment pas puisque cela fonctionne dans la majeure partie des cas et que je n'ai vraiment pas réussi à identifier un cas où l'erreur apparaitrait tout le temps. Même dans deux cas strictement identiques (mêmes informations etc) parfois ça passe, parfois non.

    Auriez-vous une idée ?

    Merci d'avance,
    Arthur

  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 674
    Points
    18 674
    Par défaut

    Bonjour,

    tenter déjà la copie directe en une instruction en indiquant la destination comme dans l'aide VBA de Range.Copy

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    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
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Bonjour Marc,

    En suivant ton conseil, j'ai décomposé chaque action pour voir où est-ce que ça plantait.
    Je suis débutant et je n'avais pas eu le réflexe de fonctionner comme ça.

    Je me suis finalement rendu compte que c'était le "unprotect" qui faisait perdre la sélection (seulement de temps en temps, ça reste un mystère) . J'ai donc réordonné mon code pour enlever la protection avant de commencer la copie.

    à bientot

  4. #4
    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 674
    Points
    18 674
    Par défaut




    La sélection étant inutile, avec juste une copie directe en une unique ligne de code …
    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)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    La sélection étant inutile, avec juste une copie directe en une unique ligne de code …
    Bonjour Marc, ça peut paraître idiot mais je ne connais pas le code pour faire ça en une ligne.. Je sais seulement selectionner, copier, puis coller.
    T'as pas juste un mini exemple que j'adapterai ?

    Merci!

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 082
    Points : 9 866
    Points
    9 866
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    exemple à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Fichier1").Worksheets("LaFeuille1").Range("A1").Copy Workbooks("Fichier2").Worksheets("LaFeuille2").Range("A1")

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Bonjour joe.levrai,

    J'avais pas exactement compris ça, et en fait dans mon cas précis je pense que ça ne changera rien parce que c'est bien la copie qui se perd lorsque je fais le "unprotect" de mon deuxième classeur. Donc je pense que ne pas passer par la sélection ne changera rien.

    Merci quand même à vous deux,
    Arthur

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Re,

    même si ça ne change rien à ton problème, ce n'est pas la question, prend quand même l'habitude d'éliminer tous les .select inutiles.
    eric

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Re,

    même si ça ne change rien à ton problème, ce n'est pas la question, prend quand même l'habitude d'éliminer tous les .select inutiles.
    eric
    Très bien, je vais faire ça pour ce projet et j'y penserai dans le futur.

    Merci !

    EDIT : en fait je m'en étais même pas rendu compte mais je n'ai pas de "select" avant ma copie (voir le code dans le premier message)

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 082
    Points : 9 866
    Points
    9 866
    Billets dans le blog
    5
    Par défaut
    Il te suffit d'unprotect ta feuille juste avant cette ligne de code
    de toute façon, telle que je l'ai rédigée, cette ligne de code est insensible à toute perte de focus, il faut juste que les deux workbooks soient ouverts

    As-tu essayé cette utilisation de la méthode Copy avant de "penser" qu'elle n'ira pas ?

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Formation à l'innovation sociale
    Inscrit en
    Février 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation à l'innovation sociale

    Informations forums :
    Inscription : Février 2017
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Il te suffit d'unprotect ta feuille juste avant cette ligne de code
    de toute façon, telle que je l'ai rédigée, cette ligne de code est insensible à toute perte de focus, il faut juste que les deux workbooks soient ouverts

    As-tu essayé cette utilisation de la méthode Copy avant de "penser" qu'elle n'ira pas ?
    Je suis étourdi et je pensais que ta solution permettais seulement d'éviter le .select alors qu'elle permet le copier/coller entier en une ligne.
    Je vais essayer. Est-ce que je peux tout de même mettre le Link:=True à la suite ?

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Et si tu n'as besoin que de la valeur sans la mise en forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Classeur1").Sheets("Feuil1").[A1] = Workbooks("Classeur2").Sheets("Feuil2").[A2]
    suffit.

    Et les .Activate de feuilles c'est pareil, ne faire que ceux indispensables (donc tous, sauf ceux où tu te fais jeter ;-) ). Tout ça mis bout à bout c'est énormément de temps gagné sur les grosses manipulations.

  13. #13
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir,

    Tout à fait d'accord sur les Select, Activate et tuti quanti, toujours les éviter, sauf dans cas rare où l'on a pas le choix …

    Après avoir ouvert tes 2 classeurs … voilà ce que tu cherches pour garder les lien :
    J'ai utilisé une formule de ce type (ici schématiquement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[NomDuClasseur.xlsm]NomDeLaFeuille!DebCelluleVoulu
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks("BDD - Fiches KM.xlsm").Worksheets("Database").Range("A3").End(xlDown)(2).Resize(, 17).FormulaLocal = "=[" & Fichier & "_" & Format(Date, "dd-mm-yyyy", vbMonday) & ".xlsm" & "]" & "Fiche" & "!A123"
    'Pourquoi un Rezize 17 sur les col : ' Debug.Print Columns("A:Q").Count => =17 => Cela permet d'étendre la formule jusqu'à la col Q sur la même ligne
    Mais dans le cas ou tes données sont statiques en A123:Q123, autant faire ce que @joe.levrai ou @ eriiic t'on proposait (que je salut au passage )

    PS : j'ai pas testé, mais tout est là est en une ligne; sur developpez, il y a @Eric KERGRESSE qui explique les formules sur 2 lien du sites => une petite recherche à faire
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2016, 15h29
  2. Copier/coller avec liaison en VBA
    Par aurelu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2016, 15h21
  3. [XL-2003] Problème copier coller avec MFC et VBA
    Par bbcancer dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/11/2011, 10h11
  4. [WD-2007] Copier / coller avec liaison d'excel à word
    Par eppo81 dans le forum Word
    Réponses: 1
    Dernier message: 21/02/2010, 12h34
  5. copier coller avec Pastespecial en VBA
    Par stormless dans le forum Général VBA
    Réponses: 1
    Dernier message: 06/11/2005, 11h59

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