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 :

Copier des cellules dans une autre feuille selon critères en VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 21
    Points
    21
    Par défaut Copier des cellules dans une autre feuille selon critères en VBA
    Bonjour,

    Je débute en VBA et je recherche une solution sur Excel qui me dépasse pour le moment malgré mes innombrables recherches sur internet.

    Voilà mon problème, j'ai un tableau général sur ma première feuille qui me sert à lister l'ensemble des véhicules dont j'ai la gestion (1 véhicule par ligne) et les autres feuilles représentent la fiche détaillée de chaque véhicule.

    J'ai créé un code qui me permet en cliquant sur un bouton de créer une feuille véhicule pour chaque ligne du tableau général et avec comme nom de chaque feuille le modèle et de l'immat correspondant à la "Liste" (colonne "MODEL" + "IMMAT" du tableau général), comme ci-dessous :

    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
    Sub CommandButton1_Click()
    Dim nom, c
    Dim strNomFeuille As String
        For Each c In Range("Liste")
        nom = c.Value
        strNomFeuille = nom
            If FeuilleInexistante(strNomFeuille) = False Then
            ' "ne rien faire"
            Else
            Sheets("Modèle").Cells.Copy
            Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
            Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
            , Transpose:=False
            ActiveSheet.Name = nom
            MsgBox "Feuille " & nom & " créée!"
            End If
        Next c
    End Sub
    Avec comme module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function FeuilleInexistante(ByVal strNomFeuille As String) As Boolean
    'Retourne TRUE si strNomFeuille est le nom d'une feuille qui n'existe pas dans le classeur actif
     
    FeuilleInexistante = IsError(Evaluate("='" & strNomFeuille & "'!A1"))
     
    End Function
    Maintenant, je souhaiterai remplir automatiquement chaque feuille véhicule par les données des lignes du tableau général correspondant au véhicule de la feuille (exemple : immatriculation, marque, modèle).
    Je ne sais pas si je suis très clair donc je vous joints le fichier :

    Fichier joint dans vos discussions
    Merci d'avance pour votre aide.

    Cordialement.

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    c'est assez simple

    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
     
    Sub CommandButton1_Click()
    Dim nom As String, c As Range
    Dim strNomFeuille As String
        For Each c In Range("Liste")
        nom = c.Value
        strNomFeuille = nom
            If Not FeuilleInexistante(strNomFeuille) = False Then
                Sheets("Modèle").Cells.Copy
                Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
                Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
                    , Transpose:=False
                ActiveSheet.Name = nom
                MsgBox "Feuille " & nom & " créée!"
            End If
            CopyDetail nom, c.EntireRow
        Next c
    End Sub
    et ici, le code pour CopyDetail

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Sub CopyDetail(destination As String, donnees As Range)
    Dim marque As String
    Dim model As String
    Dim immat As String
    Dim couleur As String
    Dim service As String
    Dim mise_en_circulation As Variant
    Dim prochain_ct As Variant
    Dim kms As Variant
    Dim energie As String
    Dim etat_du_vehicule As String
    Dim observation As String
    Dim start_ref As String
     
    'juste les données
    'marque = donnees.Cells(1, 2)
    'model = donnees.Cells(1, 2)
    'immat = donnees.Cells(1, 2)
    'couleur = donnees.Cells(1, 2)
    'service = donnees.Cells(1, 2)
    'mise_en_circulation = donnees.Cells(1, 2)
    'prochain_ct = donnees.Cells(1, 2)
    'kms = donnees.Cells(1, 2)
    'energie = donnees.Cells(1, 2)
    'etat_du_vehicule = donnees.Cells(1, 2)
    ''observation = donnees.Cells(1, 2)
    '
    'With Sheets(destination)
    '    .Cells(3, 2) = marque
    '    .Cells(3, 6) = immat
    '    .Cells(4, 2) = model
    '    .Cells(4, 6) = mise_en_circulation
    '    .Cells(5, 2) = energie
    '    .Cells(5, 6) = kms
    '    .Cells(8, 3) = prochain_ct
    'End With
     
    'la référence au tableau général
    start_ref = "='" & Feuil1.Name & "'!"
    marque = start_ref & donnees.Cells(1, 2).Address
    model = start_ref & donnees.Cells(1, 3).Address
    immat = start_ref & donnees.Cells(1, 4).Address
    couleur = start_ref & donnees.Cells(1, 5).Address
    service = start_ref & donnees.Cells(1, 6).Address
    mise_en_circulation = start_ref & donnees.Cells(1, 7).Address
    prochain_ct = start_ref & donnees.Cells(1, 8).Address
    kms = start_ref & donnees.Cells(1, 9).Address
    energie = start_ref & donnees.Cells(1, 10).Address
    etat_du_vehicule = start_ref & donnees.Cells(1, 11).Address
    observation = start_ref & donnees.Cells(1, 12).Address
     
    With Sheets(destination)
        .Cells(3, 2).Formula = marque
        .Cells(3, 6).Formula = immat
        .Cells(4, 2).Formula = model
        .Cells(4, 6).Formula = mise_en_circulation
        .Cells(5, 2).Formula = energie
        .Cells(5, 6).Formula = kms
        .Cells(8, 3).Formula = prochain_ct
    End With
     
     
    End Sub
    il y a deux variante... juste insérer la donnée ou insérer la référence
    on pourra changer le type de donnée pour les champs autre que string(indiqué comme étant Variant dans l'exemple) selon le choix que l'on effectuera.

    yo

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Bonjour mayekeul,

    Un grand merci.

    Cela paraît simple en effet mais quand on débute on passe souvent par des complications inutiles, il me semble.

    Merci encore pour ton aide qui me fera gagner un temps précieux.

    Et respect.

    Cordialement.

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

Discussions similaires

  1. [XL-2010] Copier plage de cellules vers une autre feuille selon un critère dans une boucle
    Par klash384 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2015, 17h53
  2. [XL-2010] copier et coller dans une autre feuille du même classeur VBA
    Par awa123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/08/2014, 19h35
  3. Copier des lignes dans une autre feuille sous condition
    Par Maya06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2014, 20h57
  4. [XL-2010] copier des cellules vers une autre feuille
    Par fredplusvar dans le forum Excel
    Réponses: 1
    Dernier message: 22/03/2014, 12h34
  5. [XL-2003] Copier des lignes dans une autre feuille à la première ligne vide
    Par PasDan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/09/2010, 13h34

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