Copier des cellules dans une autre feuille selon critères

Résolu
Hockhed Messages postés 2 Statut Membre -  
Hockhed Messages postés 2 Statut Membre -
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 :

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 :

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 mets les images de ma feuille tableau général et de ma feuille modèle à partir de laquelle je créée mes feuilles véhicules :





Merci d'avance pour votre aide.

Cordialement.

2 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Plutôt que des images, peux tu envoyer une partie de ton fichier, au format excel 2003, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu

    Cdlmnt
    0
  2. Hockhed Messages postés 2 Statut Membre
     
    Bonjour,

    Merci de votre aide; mais j'ai trouvé la solution grâce à une âme charitable.

    Je mets le code pour ceux que cela pourrait intéresser :
    Option Explicit

    Sub CommandButton1_Click()
    Dim nom As String, c As Range
    Dim strNomFeuille As String
    For Each c In Range("NameFeuil")
    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

    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
    '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.
    '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



    A bientôt
    0