Résolu Copier des cellules dans une autre feuille selon critères

Hookerseven77

Nouveau 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 peux vous envoyer le fichier ou 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.
 

Johann May

Grand Maître
Je ne sais pas t'aider pour ma part, le sujet étant trop spécifique et excel n’étant pas du tout ma tasse de thé.

Cependant, sur un forum type openclassroom tu devrai trouver ton bonheur, il y a souvent des profs qui répondent et de manièere très explicite pour ce genre de problèmes justement. C'est le nouveau du "Site du Zero" si tu connaissais.

https://openclassrooms.com/forum/

Edit: je sais pas si le genre de lien que je propose est autorisé mais comme ce lien est pour moi une base de donnée complémentaire a ce site je me permet de te le transmettre. Si y'a le moindre souci (j'avoue que je n'ai pas parcouru attentivement la charte fouettez moi) editez moi ;)
 

Hookerseven77

Nouveau membre
Meilleure réponse
Bonjour,

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

Je mets donc 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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 103
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut