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 :

[VBA-E] [help]macro pour dupliquer une feuille (en valeur)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    hello

    j'ai un fichier excel composé de 2 feuilles : "base" et "fiche"
    "base" contient une liste d'infos sur plusieurs individus et "fiche" permet d'afficher la fiche d'un gars avec toute une série de recherchev et autres fonctions amusantes

    ce que j'aimerais? avoir une pitite macro vba qui me permette d'enregistrer toutes les fiches dans un fichier à part, 1 fiche par feuille (jai 94 titulaires), nommée par le nom de l'individu (stocké en cellule C11), EN SUPPRIMANT LES LIAISONS & FORMULES avant de passer à la fiche suivante

    j'y connais rien en VBA mais qqn m'avait déjà fait ce genre de truc pour créer des fichiers html et la macro n'avait pas l'air super compliqué... est-ce que qqn peut m'aider svp?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Tu choisi comment la fichie à afficher ... tu as une liste ?




    desolé... Alain pour l'edit ... j'ai écrit trop vite... et corrigé dans la foulée...

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bon j'ai supossé que la listes des nom des 94 individu été dans la colonne A du fichier base ...:

    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
    Dim Fd As Workbook 'Classeur destination
     
    Sub CopieFeuille()
      If IsEmpty(Fd) Or Fd Is Nothing Then
     
        ThisWorkbook.Sheets("Fiche").Copy
       Set Fd = ActiveWorkbook
      Else
        ThisWorkbook.Sheets("Fiche").Copy After:=Fd.Sheets(Fd.Sheets.Count)
      End If
       ActiveSheet.Name = ActiveSheet.Range("C11").Value
       Cells.Copy
       Cells(1, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
        Range("A1").Select
     End Sub
    Sub test()
      Dim r As Range ' Ligne ...
        For Each r In ThisWorkbook.Sheets("Base").Cells(1, 1).CurrentRegion.Rows 'Parcours les lignes de la feuille de base
        ThisWorkbook.Sheets("Fiche").Range("C11") = r.Cells(1, 1).Value '.. 1° Colonne le Nom en réfèrence..
        CopieFeuille
       Next
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pendant qu'ils se font la guerre, ces deux là, tu peux sélectionner ta plage de connées, créer une nouvelle feuille de calcul, la nommer avec le contenu de la cellule C11, et coller les "Valeurs"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        NomFeuille = Range("C11").value
        Range("A1").Select
        Selection.CurrentRegion.Select
        Selection.Copy
        Sheets.Add
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
        With activesheet
                    .Name = NomFeuille
        End with
    A+

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par ouskel'n'or
    Pendant qu'ils se font la guerre, ces deux là, tu peux sélectionner ta plage de connées, créer une nouvelle feuille de calcul, la nommer avec le contenu de la cellule C11, et coller les "Valeurs"
    c'est ou la guerre ?...

    sinon tout est déjà dans le code + haut...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Grillé sur ce coup là...

    Pour nommer ta feuille, tu peux effectivement prendre la solution de Bbil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With activesheet 
                    .Name = ActiveSheet.Range("C11").Value  
        End
    ce qui t'évite une variable... mais ma solution reste plus courte...

    A+

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par ouskel'n'or
    ce qui t'évite une variable... mais ma solution reste plus courte...
    désolé ... mais si elle est plus courte c'est parce qu'elle ne fait pas tous ce qui faut ...

    - Elle ne copie pas le formatage (largeurs colonnes, lignes..) complet de la f iche..
    - si les cellules adjacente à la cellule A1 son vide ... ( ce qui à de grande chance d'être le cas pour une fiche et non pas une liste) ... tu copie seulement le contenu de A1 et au mieux les cellules non-vides adjacente...

    - Comment change tu de titulaire..

    (...)

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello bbil,
    D'accord pour le format... J'ai raté le coche...
    mais pour ce qui est du nom du titulaire, je pense qu'avant de copier la fiche elle est mise à jour.
    "fiche" permet d'afficher la fiche d'un gars avec toute une série de recherchev et autres fonctions amusantes
    Ensuite, j'ai supposé que si toutes les cellules n'étaient pas renseignées, elles comportaient au moins une formule auquel cas currentregion... etc... mais bon, tu as quand même raison, je te le concède bien volontier, d'autant que je suis obligé de reconnaître que je m'inspire souvent de tes réponses...

    A+

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup pour ces réponses

    j'essaye tout de suite mais j'ai oublié de préciser quelquechose : la fiche se met à jour en fonction d'un numéro qui fait le lien entre "base" et "fiche" et qui sert de référence aux recherchev

    ce numéro se trouve en cellule C2 dans "fiche" et doit s'incrémenter au fur et à mesure pour que la fiche s'actualise avec le titulaire suivant

    est-ce que cette macro marche comme ça?

  10. #10
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    argh, ça marche pas...

    alors pour préciser :

    dans ma feuille "base", les numéros qui servent aux recherchev sont en colonne A (à partir de A4) et les noms sont en colonne C (à partir de C4)

    dans la feuille "fiche", le numéro se trouve en cellule C2 et doit s'incrémenter de 1 à 94 pour sortir les 94 fiches différentes
    le nom apparait grâce au résultat d'un recherchev (de la même façon que toutes les autres infos) dans la cellule C11 et ne doit servir à rien d'autre qu'à renommer l'onglet

    dernier point, il est super important qu'à chaque fiche, les formules et liens soient supprimés parce que j'ai une image (drapeau) qui s'affiche en fonction du pays d'origine de la personne mais c'est avec une fonction DECALER et si je duplique 5 fois la même fiche avec des titulaires différents, tout le monde aura le même drapeau (celui du dernier)

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    dans la feuille "fiche", le numéro se trouve en cellule C2 et doit s'incrémenter de 1 à 94 pour sortir les 94 fiches différentes
    Qu'est-ce qui incrémente la cellule C2 ?
    Non, la macro ne prévoit pas l'incrémentation. Est-ce qu'elle marche "comme ça" ? Quelle est ta question ?
    Si tu connais la plage de cellules à copier, c'est facile. Donne-la, on mettra un exemple.

    argh, ça marche pas...
    Qu'est-ce qui ne marche pas ? Les RechercheV ? la copie ? l'incrémentation ?

    A toi

  12. #12
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    bin en fait, j'ai modifié les trucs en rouge parce que je n'avais pas été assez précis et la macro plante dès la 1ère ligne (en bleu)

    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
    Sub CopieFeuille()
    [color=blue]  If IsEmpty(Fd) Or Fd Is Nothing Then[/color]
     
        ThisWorkbook.Sheets("Fiche").Copy
       Set Fd = ActiveWorkbook
      Else
        ThisWorkbook.Sheets("Fiche").Copy After:=Fd.Sheets(Fd.Sheets.Count)
      End If
       ActiveSheet.Name = ActiveSheet.Range("C11").Value
       Cells.Copy
       Cells(1, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
        Range("A1").Select
     End Sub
     
    Sub test()
      Dim r As Range ' Ligne ...
        For Each r In ThisWorkbook.Sheets("[color=red]Base[/color]").Cells([color=red]4, 1[/color]).CurrentRegion.Rows 'Parcours les lignes de la feuille de base
        ThisWorkbook.Sheets("Fiche").Range("C11") = r.Cells([color=red]4, 1[/color]).Value '.. 1° Colonne le Nom en réfèrence..
        CopieFeuille
       Next
    End Sub

  13. #13
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    et pour la cellule C2, je l'incrémente pour l'instant à la main, les formules se mettent à jour et j'imprime ensuite la fiche mais comme c'est assez long, c'est pour ça que j'aimerais avoir toutes les fiches en même temps sous les yeux

    donc j'aimerais savoir si la macro incrémente qqchose jusqu'à 94 ou si elle se sert uniquement du nom, parce que si c'est le cas, ça n'est pas le nom qui sert aux recherchev, c'est le numéro (qui se trouve en 1ère colonne dans "Base" (qui en fait s'appelle "List") et qui se trouve en C2 dans "Fiche")

    merci beaucoup de votre aide

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    il te suffit de modifier la macro d'appel :

    si le nombre 94 est définitif tu peu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
     Dim i as integer
       For i    = 1 to 94
    ThisWorkbook.Sheets("Fiche").Range("C2") = i
     CopieFeuille 
       Next
    End Sub

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par minikisskool
    bin en fait, j'ai modifié les trucs en rouge parce que je n'avais pas été assez précis et la macro plante dès la 1ère ligne (en bleu)

    Sub CopieFeuille()
    If IsEmpty(Fd) Or Fd Is Nothing Then
    la premiére ligne c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Fd As Workbook 'Classeur destination


    le "truc en bleu" est un test ... si FD est vide c'est la premiére fiche , l'on cre un nouveau classeur .... si FD existe ... on rajoute au classeur existant ( pour les autres fichies...)

    remet cette premiére ligne en bleu si tu veu que ça marche ....

  16. #16
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    c'est bon, c'est modifié mais il continue à me mettre "erreur, objet requis" dès la 1ère ligne " If IsEmpty(Fd) Or Fd Is Nothing Then"

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par minikisskool
    c'est bon, c'est modifié mais il continue à me mettre "erreur, objet requis" dès la 1ère ligne " If IsEmpty(Fd) Or Fd Is Nothing Then"
    tu as rajouter la ligne ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Fd As Workbook 'Classeur destination
    tout en haut de ton module ? (c'est une variable globale...)...

  18. #18
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    euh en fait, elle y est encore...
    mais excel trace un trait au-dessus de "Sub CopieFeuille()" alors je ne sais pas si c'est pris en compte....

    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
    Dim Fd As Workbook 'Classeur destination
     
    Sub CopieFeuille()
      If IsEmpty(Fd) Or Fd Is Nothing Then
     
        ThisWorkbook.Sheets("Fiche").Copy
       Set Fd = ActiveWorkbook
      Else
        ThisWorkbook.Sheets("Fiche").Copy After:=Fd.Sheets(Fd.Sheets.Count)
      End If
       ActiveSheet.Name = ActiveSheet.Range("C11").Value
       Cells.Copy
       Cells(1, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
        Range("A1").Select
     End Sub
     
    Sub test()
     Dim i As Integer
       For i = 1 To 94
    ThisWorkbook.Sheets("Fiche").Range("C2") = i
     CopieFeuille
       Next
    End Sub

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et au dessus de cette ligne il ya rien ?

  20. #20
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    ah si, je l'ai remis dans un module à part et ça a l'air de marcher (sauf que ça bug à cause des cellules fusionnées à partir de la 2e fiche)

    bref, je n'ai qu'une fiche pour l'instant mais ça marche (sauf que les formules et liens sont encore là mais j'attends de pouvoir en sortir plus pour vérifier)

    je regarde et je vous tiens au courant

    merci beaucoup

Discussions similaires

  1. [Toutes versions] Macro pour ajouter une feuille excel avec un nom précis
    Par luc-ratif dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2014, 09h53
  2. [jxl] probleme pour dupliquer une feuille
    Par Noctis dans le forum Documents
    Réponses: 0
    Dernier message: 20/01/2014, 11h40
  3. [XL-2002] Macro pour copier une feuille dans un autre classeur
    Par JBeaunez dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2012, 21h46
  4. [XL-2007] Macro pour copier une feuille
    Par francky62000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2011, 16h36
  5. [E-97] macro pour déprotéger une feuille (fichier partagé)
    Par mart159 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2008, 08h09

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