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 :

Echec de la méthode pastespecial [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
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2018
    Messages : 14
    Par défaut Echec de la méthode pastespecial
    Bonjour à tous,

    Je m'essaie au code VBA et suis confrontée à une difficulté (certainement toute banale). Sur un classeur excel, j'ai crée un formulaire dans lequel des données sont attendues. Ces données renseignées sont capitalisées sur la même feuille du classeur en une ligne pour être ensuite copier grâce à mon code. Par la suite, elles sont collées dans une autre feuile du classeur dans une "base de données" nommée "LO 005". Seulement au lancement de mon code, un message d'erreur m'indique que la méthode pastespecial de la classe range a échoué. J'ai essayé de chercher sur les forums mais en tant que débutante difficile de trouver une solution pour mon problème. Si je peux trouver un peu d'aide ici ce serait parfait. Je peux éventuellement envoyer le fichier complet.

    Merci d'avance

    Le formulaire de saisie dans la feuille "SAISIE SORTIE MANUELLE"
    Nom : formulaire de saisie.JPG
Affichages : 1139
Taille : 65,1 Ko

    La ligne capitalisant l'information saisie dans le formulaire + autre information complémentaire dans cette même feuille

    Nom : ligne données.JPG
Affichages : 1121
Taille : 20,0 Ko

    Mon code erroné - soulignée la partie où l'erreur se déclare


    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
    'LECTURE DONNEES DEMANDE SORTIES MANUELLES
    
    Sheets("SAISIE SORTIE MANUELLE").Unprotect Password:="LEAN"
    Sheets("EN LO 005").Unprotect Password:="LEAN"
    
    Sheets("SAISIE SORTIE MANUELLE").Range("AH1:AV1").Copy
    
    
    'COLLER DANS BASE DE DONNEES
    
    Sheets("EN LO 005").Select
    
    premiere_ligne = Range("F" & Rows.Count).End(xlUp).Row + 1 'calcul de la première ligne vide
    
    Cells(premiere_ligne, 1) = Cells(premiere_ligne - 1, 1) + 1 'Incrémentation du numéro de la demande
    
    Sheets("EN LO 005").Range("F" & premiere_ligne).PasteSpecial Paste:=xlPasteValues
    
    Sheets("EN LO 005").Protect Password:="LEAN"
    Sheets("SAISIE SORTIE MANUELLE").Protect Password:="LEAN"

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par strkk Voir le message
    Bonjour,

    Essayez ce code qui fonctionne chez moi :
    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
     
    Sub TestCopierColler()
     
        CopierColler Sheets("SAISIE SORTIE MANUELLE"), "LEAN", Sheets("EN LO 005"), "LEAN"
     
    End Sub
     
    Sub CopierColler(ByVal FeuilleSource As Worksheet, ByVal MotDePasseSource As String, ByVal FeuilleCible As Worksheet, ByVal MotDePasseCible As String)
     
    Dim Premiere_Ligne As Long
     
       FeuilleCible.Unprotect Password:=MotDePasseCible
       With FeuilleSource
            .Unprotect Password:=MotDePasseSource
            .Range("AH1:AV1").Copy
       End With
       With FeuilleCible
             Premiere_Ligne = .Range("F" & Rows.Count).End(xlUp).Row + 1
             .Cells(Premiere_Ligne, 1) = Cells(Premiere_Ligne - 1, 1) + 1
             .Range("F" & Premiere_Ligne).PasteSpecial Paste:=xlPasteValues
             .Protect Password:=MotDePasseCible
        End With
        FeuilleSource.Protect Password:=MotDePasseSource
     
    End Sub

  3. #3
    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,

    Ce code devrait fonctionner, à moins que le mot de passe ne soit pas bon.

    La programmation exige beaucoup de rigueur, quelques conseils :
    - commencer tous les modules par Option Explicit, qui oblige à déclarer toutes les variables
    - déclarer les variables avec le type ad hoc (pas toutes en Variant).
    - ne jamais utiliser .Select
    - envisager toutes les valeurs potentielles des variables pour éviter les erreurs
    - éviter d'utiliser des propriétés ou méthodes d'objet qui pourraient ne pas exister (Ex: au lieu de Sheets(1).Range("A1") écrire Workheets(1).Range("A1")
    - éviter les références implicites (ex: au lieu de =Cells(1,2) écrire =Worksheets(1).Cells(1,2).Value)
    - éviter si possible d'utiliser le Presse-Papier

    Une autre façon d'écrire ton code :
    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
    Option Explicit
    Sub xxx()
    Dim rngSource As Range
    Dim premiere_ligne As Long
     
      'LECTURE DONNEES DEMANDE SORTIES MANUELLES
      Set rngSource = Worksheets("SAISIE SORTIE MANUELLE").Range("AH1:AV1")
      'COLLER DANS BASE DE DONNEES
      With Worksheets("EN LO 005")
        .Unprotect Password:="LEAN"
        premiere_ligne = .Range("F" & Rows.Count).End(xlUp).Row + 1 'calcul de la première ligne vide
        .Cells(premiere_ligne, 1).Value = .Cells(premiere_ligne - 1, 1).Value + 1 'Incrémentation du numéro de la demande
        .Range("F" & premiere_ligne).Resize(1, rngSource.Count).Value = rngSource.Value
        .Protect Password:="LEAN"
      End With
     
    End Sub
    PS : je n'utilise jamais de mot de passe pour protéger une feuille :
    - la protection suffit à prévenir l'utilisateur qu'il ne faut pas écrire dans cette cellule
    - ça évite de l'oublier (quand on revient sur un code plusieurs années après)
    - ça évite de l'écrire en clair dans le code
    - ça résiste pas à celui qui veut l'enlever

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2018
    Messages : 14
    Par défaut
    Merci beaucoup pour votre aide cela fonctionne !!

    Je vais tâcher d'appliquer les conseils pour le reste de mon code.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/02/2015, 13h06
  2. [XL-2007] Information sur la méthode pastespecial
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2010, 15h15
  3. [XL-2007] Echec de la méthode "Range"
    Par DiesIrae dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/10/2009, 14h22
  4. Réponses: 0
    Dernier message: 21/07/2008, 09h00
  5. La méthode pastespecial de la classe range a échoué
    Par heyhey62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 17h52

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