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 :

Copie capricieuse des valeurs d'un range vers une autre feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut Copie capricieuse des valeurs d'un range vers une autre feuille
    Bonjour à tous.
    J'ai un petit soucis que je n'arrive pas à résoudre.
    J'ai un fichier excel dont la première feuille ( Feuil1) sert de base, avec une combo intégrée par colonne qui permet à l'utilisateur de faire une recherche pour n'afficher que les lignes voulues.

    Je souhaite copier les valeurs des lignes non masquées (celles qui correspondent donc à la recherche) vers une autre feuille du même classeur qui est vierge (en l'occurrence Feuil3).
    Les cellules de Feuil1 peuvent aussi bien contenir des dates, des string ou des formats monétaires.

    Je précise (au cas où) que je n'ai pas accès au code des combos de Feuil1. Ca a été fait par une boite de services informatiques et c'est protégé par mot de passe.

    Feuil1 ne contient des données qu'à partir de la ligne 10, d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Const lignDeb As Long = 10
    que j'ai déclaré dans le code de Feuil3.

    Voici la sub appelée lorsque l'utilisateur sélectionne l'onglet Feuil3 :

    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
    Private Sub copDonnees()
     
    Dim i As Long
    Dim DerniereLigne As Long
    Dim lignVis As Range
    DerniereLigne = Feuil1.Cells(65536, 1).End(xlUp).Row
     
    Worksheets("BASE").Activate
     
     
        For i = lignDeb To DerniereLigne
     
            If Not Feuil1.Rows(i).Hidden Then
            'si la ligne n'est pas masquée
                If Not lignVis Is Nothing Then
                    Set lignVis = Application.Union(lignVis, Feuil1.Cells(i, 1).EntireRow)
                Else
                    Set lignVis = Feuil1.Cells(i, 1).EntireRow
                End If
            End If
        Next
     
    lignVis.Copy Feuil3.Cells(10, 2)
    End Sub
    Je me casse les dents sur une erreur d'exécution 1004 :
    'Impossible de coller les informations car les zones Copier et de collage sont de forme et de taille différentes'

    J'ai bien entendu essayé toutes les solutions proposées par l'aide, mais rien n'y fait.

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour,
    A priori, tu sélectionne de la colonne A à IV (EntireRow) pour copier sur l'autre feuille dans la colonne B, donc ça dépasse forcément.
    Tu as donc 2 options, tu réduis la plage à copier de B à IV (ou dernière colonne remplie),
    Ou tu colle dans la colonne A de ta feuille de destination, ce que j'imagine plus pertinent, adapte donc la ligne avant ton End Sub avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignVis.Copy Feuil3.Cells(10, 1)
    Je pense que ça ira.

    Bonne continuation,

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Bonjour, et merci de passer du temps sur mon problème.

    A ben oui bien sûr. J'y avais pas du tout pensé mais forcément maintenant que tu me le dis, ça parait évident. Je ne sais pas pourquoi, mais dans mon raisonnement je tenais pour principe que la sélection ne portait effectivement que sur les cellules non vides, donc jusqu'à la colonne AM dans mon cas.

    J'ai testé et ça venait bien de là.

    Je me sens un peu débile sur ce coup ...

    Merci beaucoup de ton aide , et désolé du dérangement.

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Si ça peut te rassurer, si j'y ai pensé c'est que l'apprentissage se fait, entre autre, par l'expérience...j'ai moi même planté (un bon moment) sur un cas similaire

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Bon, j'ai crié victoire trop tôt.

    Il se trouve que la copie a marché une fois et pas plus ....
    J'efface bien le contenu de Feuil3 via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Worksheets("feuil3").Select
    Selection.ClearContents
    avant de faire une nouvelle copie, mais ça me laisse le formatage des cellules.
    J'ai pensé que l'erreur de copie venait de ça, et avant de chercher comment enlever ce formatage, j'ai tenté de supprimer les lignes à la main puis de refaire une copie.

    Ca ne marche pas non plus puisque je me paye maintenant un echec de la methode Copy de la classe Range, toujours sur la même ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignVis.Copy Feuil3.Cells(10, 1)
    Je remets le code de la methode pour plus de lisibilité (t'auras pas à jouer avec ta molette pour remonter au début du thread )

    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
    26
    27
    'copie des données filtrées de la feuille 1 vers la feuille 3
    Private Sub copDonnees()
     
    Dim i As Long
    Dim DerniereLigne As Long
    Dim lignVis As Range
    DerniereLigne = Feuil1.Cells(65536, 1).End(xlUp).Row
     
    ThisWorkbook.Worksheets("feuil3").Select
    Selection.ClearContents
    Worksheets("BASE").Activate
     
        For i = lignDeb To DerniereLigne
     
            If Not Feuil1.Rows(i).Hidden Then
            'si la ligne n'est pas masquée
                If Not lignVis Is Nothing Then
                    Set lignVis = Application.Union(lignVis, Feuil1.Cells(i, 1).EntireRow)
                Else
                    Set lignVis = Feuil1.Cells(i, 1).EntireRow
                End If
            End If
        Next
     
    lignVis.Copy Feuil3.Cells(10, 1)
    'Worksheets("Feuil3").Activate
    End Sub

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Là comme ça je sèche, ça bloque sur quelle ligne, quel est le message d'erreur?
    Sinon si ça te dérange pas de joindre le fichier, je veux bien y jeter un oeil
    (réunion annulée, j'ai un peu de temps )

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/02/2014, 11h41
  2. [XL-2003] Copier automatiquement des valeurs vers une autre feuille
    Par Rabiry dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 24/01/2013, 08h31
  3. Réponses: 5
    Dernier message: 20/12/2012, 11h22
  4. [PHPExcel] Récupération des valeurs via liaison vers une autre feuille
    Par thbmath dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/12/2012, 21h41
  5. [XL-2007] Macro: comment importer des valeurs de fichiers Excel vers un autre fichier Excel?
    Par jerdel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2012, 16h23

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