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

Excel Discussion :

Copier les données de plusieurs feuilles nommées sur une autre feuille


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Artisan
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Copier les données de plusieurs feuilles nommées sur une autre feuille
    Bonjour le forum,
    J’ai un souci pour une macro prise sur le forum et que, j’ai voulu modifier à ma sauce.
    Malheureusement je n’y arrive pas. Je pense qu’un de vous pourra m’aider. Le problème est le suivant :
    Je veux transférer les données des colonnes Libellé et Occurrences des feuilles (DE-LIB, AR-DE, AR-LIB) uniquement dans la feuille(ABC), sachant que mon classeur contient plusieurs autres feuilles.
    Je vous joins un exemple de mon besoin.
    Par avance merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Peu de gens ouvrent les fichiers dès le premier message
    J’ai un souci pour une macro prise sur le forum et que, j’ai voulu modifier à ma sauce.
    Peux-tu, en revanche, publier le code que tu as déjà fait (entre balises "#")
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Peu de gens ouvrent les fichiers dès le premier message
    J'abonde à 100% dans le sens de casefayere.
    Il est à mon sens anormal d'avoir à ouvrir un classeur (avec les risques induits, y compris à l'insu de celui qui le met à disposition) pour aider à la solution d'un problème.
    Le demandeur doit savoir isoler le problème et ne montrer que les lignes de code qui le posent, accompagnées de la description des tenants et aboutissants de cette seule partie.
    Un classeur ne devrait être déposé qu'à la demande expresse de l'un des répondants, à charge pour lui de décider qu'en faire.
    Et dans la foulée, disons donc les choses telles qu'elles sont finalement : à passer par un échange à l'issue du dépôt d'un classeur, il est clair que la solution éventuellement apportée ne bénéficiera à aucun des visiteurs et/ou membres de ce forum qui, eux, ont pris la décision de ne jamais courir le risque d'ouvrir un classeur (qui EST un exécutable).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Artisan
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Merci du retour, c'est un oubli de ma part.
    En fait avec le même classeur voici l'erreur:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    Sub recup()
    Dim debut, ligne As Integer
    Dim liste, valeur As Variant
    Dim trouve As Boolean
    liste = Array(shDE_LIB, shAR_DE, shAR_LIB)
    Application.ScreenUpdating = False
        Range("A6").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.ClearContents
             ligne = Range("a49901").End(xlUp).Row + 1
    For i = 1 To ThisWorkbook.Sheets.Count
                trouve = False
            For Each valeur In liste
                pos = InStr(ThisWorkbook.Sheets(i).Name, valeur)
              If pos > 0 Then
                trouve = True
              End If
            Exit For
              If trouve Then
                Sheets(i).Select
                debut = 0
            For j = 1 To Range("b49901").End(xlUp).Row
              If Cells(j, 2) = "Libellé" Then
                debut = j + 1
             End If
             Next j
            fin = Sheets(i).Range("c49901").End(xlUp).Row - 1
            Range(Cells(debut, 1), Cells(fin, 3)).Copy
            Sheets("ABC").Select
            Cells(ligne, 1).Select
            ActiveSheet.Paste
            ligne = Range("A49901").End(xlUp).Row + 1
    Next i '"""""""""""je bloque à ce niveau  """""""""""""
            'l'erreur c'est d'ajouter un autre next alors que celui là est suffisant 
           [A1].Select
        Application.ScreenUpdating = True
        End Sub  
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    Quant à moi je ne sais pourquoi ajouter un next, et d'ailleur quant j'ajout il signale toujour l'erreur.
    Que dois-je faire, peut être que j'ai oublié qlq chose.
    Une fois de plus merci.

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    excuses-moi de te dire que ton code est une horreur, tous ces "Select" qui ne servent à rien et s'il n'y avait que ça.....
    tu aurais identé ton code, tu aurais vu qu'il te manque déjà un "Next" correspondant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each valeur In liste
    et un "End If" correspondant à je n'ose pas aller plus loin
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    je pense que tu devrais déclarer une variables pour tes lignes tes boucles serons plus simple à l'utilisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbl = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Artisan
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Je reviens sur le post de casefayere, à vrai dire c'est pas de cette façon qu'on peut apporter de l'aide à une personne.
    Peut-être je peux te l'accorder, mon code est fouilli fouilli, je vais essayer le mettre un peu propre.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub recup()
    Dim debut, ligne As Integer
    Dim liste, valeur As Variant
    Dim trouve As Boolean
                 liste = Array(shDE_LIB, shAR_DE, shAR_LIB)
                  Application.ScreenUpdating = False
                  Range("A6").Select
                  Range(Selection, Selection.End(xlToRight)).Select
                  Range(Selection, Selection.End(xlDown)).Select
                  Application.CutCopyMode = False
                  Selection.ClearContents
           ligne = Range("a49901").End(xlUp).Row + 1
       For i = 1 To ThisWorkbook.Sheets.Count 
                   trouve = False
             For Each valeur In liste 
                   pos = InStr(ThisWorkbook.Sheets(i).Name, valeur)
                      If pos > 0 Then    
                     trouve = True
                      End If    
         Exit For    
                 If trouve Then   
                     Sheets(i).Select
                        debut = 0
          For j = 1 To Range("b49901").End(xlUp).Row 
                       If Cells(j, 2) = "Libellé" Then
                            debut = j + 1
                        End If
          Next j 
                   end if 
              fin = Sheets(i).Range("c49901").End(xlUp).Row - 1
                      Range(Cells(debut, 1), Cells(fin, 3)).Copy
                      Sheets("ABC").Select
                      Cells(ligne, 1).Select
                      ActiveSheet.Paste
                      ligne = Range("A49901").End(xlUp).Row + 1
       Next i   
                Application.ScreenUpdating = True
    End Sub
    Je pense qu'il est un peu clair maintenant.
    mes le problème reste le même, au niveau de Next i le code demande un autre next pourquoi ?
    merci de vos réponses et remarques

    Cordialement.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Lamenase Voir le message
    Je reviens sur le post de casefayere, à vrai dire c'est pas de cette façon qu'on peut apporter de l'aide à une personne.
    Bien au contraire.
    Tu devrais lire avec attention les précieux conseils qu'il t'a apportés et les appliquer.

    Autre conseil limité à ce forum : mets des balise CODE à ton code pour le rendre plus lisible.
    http://club.developpez.com/regles/#LIII-E

    Regarde, je te mets un code propre et tu vas tout de suite (du moins je l'espère) voir le problème (problème que casefayere t'a signalé explicitement et que tu n'as pas corrigé).

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub recup()
    Dim debut, ligne As Integer
    Dim liste, valeur As Variant
    Dim trouve As Boolean
     
    liste = Array(shDE_LIB, shAR_DE, shAR_LIB)
     
    Range(Range("A6").End(xlDown), Range("A6").End(xlToRight)).ClearContents
     
    ligne = Range("a49901").End(xlUp).Row + 1
    For i = 1 To ThisWorkbook.Sheets.Count
        trouve = False
        For Each valeur In liste[/COLOR] 
            pos = InStr(ThisWorkbook.Sheets(i).Name, valeur)
            If pos > 0 Then
                trouve = True
            End If
            Exit For
            If trouve Then
                Sheets(i).Select
                debut = 0
                For j = 1 To Range("b49901").End(xlUp).Row[/COLOR] 
                    If Cells(j, 2) = "Libellé" Then
                        debut = j + 1
                    End If
                Next j
            end if
            fin = Sheets(i).Range("c49901").End(xlUp).Row - 1
            Range(Cells(debut, 1), Cells(fin, 3)).Copy
            Sheets("ABC").Select
            Cells(ligne, 1).Select
            ActiveSheet.Paste
            ligne = Range("A49901").End(xlUp).Row + 1
     
     
    Next i 
     
    End Sub
    A moins que tu considère que Exit For soit équivalent à un Next, ce qui n'est pas le cas.
    Exit for permet de sortir d'une structure For au cours de l'exécution mais ne ferme pas la structure.
    https://msdn.microsoft.com/fr-fr/lib.../gg264596.aspx
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Merci Menhir, si lamenase me lisait un peu plus, il comprendrait que je ne suis pas une menace pour l'intégrité des discussions,
    à Lamenase
    il ne faut pas prendre mes propos, péjorativement et savoir accepter des critiques que j'estime constructives, allez respires un bon coup !!

    en partant sur te bonnes bases (celles de Menhir, par exemple) je reste prêt à t'aider (si tu en a encore besoin, évidemment) dans la limite de mes connaissances,
    ne prends pas la mouche avec des termes qui n'ont rien de méchant (horreur)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    En regardant ce code d'un peu plus prêt, je m'aperçois que le Exit For est placé de manière totalement illogique.
    Normalement, un Exit For est assujetti à un If ou autre structure conditionnelle.
    Tel qu'il est mis, il n'y a aucune chance que les instructions après Exit For soit exécutées.

    Ce qui confirme l'intuition que j'avais que tu n'as pas compris la nature de cette instruction.
    Je te conseille donc de lire le dernier lien que je t'ai transmis dans mon précédent message.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. trier et copier des données sur une autre feuille excel
    Par mirage37 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2012, 17h08
  2. [XL-2003] copier un feuille excel sur une autre feuille excel
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2010, 13h31
  3. Copier les données de plusieurs colonnes dans une nouvelle feuille
    Par lolonico1974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2010, 07h51
  4. [XL-2007] récupération de données à partir d'un tableau sur une autre feuille
    Par cindy6311 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/08/2009, 14h34
  5. Réponses: 2
    Dernier message: 29/11/2006, 11h52

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