Copier des cellules dans une autre feuille selon critères

Résolu/Fermé
Hockhed Messages postés 2 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 15 juillet 2015 - 14 juil. 2015 à 11:28
Hockhed Messages postés 2 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 15 juillet 2015 - 15 juil. 2015 à 20:10
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.
A voir également:

2 réponses

ccm81 Messages postés 10520 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2023 2 334
14 juil. 2015 à 15:43
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
Hockhed Messages postés 2 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 15 juillet 2015
15 juil. 2015 à 20:10
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