Copier lignes à partir d'onglet maître
Bonjour à toutes et à tous,
Je suis actuellement en train d'écrire une macro permettant de copier des lignes d'un onglet dans d'autres onglet en fonction d'une condition (en gros si la première cellule de la ligne du tableau est égale au nom de l'onglet, alors la ligne est copiée dans l'onglet correspondant). Je ne suis pas un pro de VBA mais après avoir enquêter sur les différents forums j'en suis arrivé au code suivant :
Sub test()
Call en_tête fonction qui copie les 3 premières lignes du fichier maître dans tous les autres onglets
For l = 4 To DerniereLigne (Derniere ligne non vide du tableau maître)
For m = 1 To Sheets.Count
If Sheets(m).Name = "Export NDF" Then L'onglet "Export NDF" est l'onglet maître
ElseIf Sheets(m).Name = Sheets("Export NDF").Cells(l, 1).Value Then Sheets("Export NDF").Rows(l).Copy Sheets(m).Rows(l) c'est là que le code ne marche pas, pas de message d'erreur mais pas de copie de données dans les onglets non plus.
End If
Next m
Next l
End Sub
Donc pour résumer, je n'ai pas de message d'erreur mais les données ne se copient pas dans les onglets.
je peux joindre le fichier si besoin, comme il contient des données de l'entreprise il faudra que je modifie les données avant.
Merci d'avance pour votre aide
Bonjour Sozper, bonjour le forum,
Essaie comme ça :
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set OS = Worksheets("Export NDF") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet source OS
For I = 4 To DL 'boucle sur toutes les lignes I de 4 à DL
Set OD = Worksheets(OS.Cells(I, 1)) 'définit l'onglet destination OD
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
OS.Rows(I).Copy DEST 'copie la ligne I de l'onglet source et la colle dans DEST
Next I 'prochaine ligne de la boucle
End Sub
Bonjour,
Dans le même genre que ThauThème
Sub Test()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim Lig As Long
Dim Mess As String
'défini la plage sur la colonne A de la feuille "Export NDF" à partir de A4, adapter..!
With Worksheets("Export NDF"): Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
For Each Cel In Plage
'gère les erreurs qui peuvent se produire si feuille absente ou son nom mal orthographié
On Error Resume Next
Set Fe = Worksheets(Cel.Value)
'si elle existe...
If Err.Number = 0 Then
With Fe
'numéro de ligne de la dernière cellule non vide en colonne A
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row
'si la colonne A de la feuille n'est pas vide, incrémente
If Cells(Lig, 1).Value <> "" Then Lig = Lig + 1
'inscrit les valeurs
.Rows(Lig).Value = Worksheets("Export NDF").Rows(Cel.Row).Value
End With
Else
'...sinon, mémorise le nom
Mess = Mess & Cel.Value & vbCrLf
End If
Next Cel
'affiche le message le cas échéant
If Mess <> "" Then
Mess = "Les feuilles ci-dessous sous manquantes :" & vbCrLf & Mess
MsgBox Mess
End If
End Sub
C'est un vrai plaisir d'avoir des réponses aussi rapidement surtout que ça marche au poil !
J'ai plus qu'à rajouter un petit bouton et j'envoie ça.
Bonne soirée
Bonjour,
En fait je n'avais pas bien regardé, mais lorsque les lignes se copient dans les onglets, seulement une ligne se copie (excepté pour le dernier groupe de cellule du tableau où toutes les lignes se copient bien comme il faut).
Est-ce que vous pensez savoir où est le bug ?
Merci d'avance !
NB : j'ai utilisé le code de Theze
Bonjour,
je peux joindre le fichier si besoin, comme il contient des données de l'entreprise il faudra que je modifie les données avant.
ça serait judicieux !
J'essaye également de créer un fichier TCD permettant de faire un récapitulatif des totaux de chacun. Le code marche presque mais il me rajoute une ligne en trop quand j'appuie sur le bouton actualiser.
(le bouton actualiser exécute la fonction final qui reprend le code de theze + la fonction TCD)
Remplaces le code précédemment donné par celui-ci (petite correction au niveau de la définition de ligne). Tu as un espace parasite en fin du prénom Pierre :
Sub Final()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim Lig As Long
Dim Mess As String
Call en_tête
'défini la plage sur la colonne A de la feuille "Export NDF" à partir de A4, adapter..!
With Worksheets("Export NDF"): Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
For Each Cel In Plage
'gère les erreurs qui peuvent se produire si feuille absente ou son nom mal orthographié
On Error Resume Next
Set Fe = Worksheets(Cel.Value)
'si elle existe...
If Err.Number = 0 Then
With Fe
'numéro de ligne de la dernière cellule non vide en colonne A
Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'inscrit les valeurs
.Rows(Lig).Value = Worksheets("Export NDF").Rows(Cel.Row).Value
End With
Else
'...sinon, mémorise le nom
Mess = Mess & Cel.Value & vbCrLf
End If
Next Cel
'affiche le message le cas échéant
If Mess <> "" Then
Mess = "Les feuilles ci-dessous sous manquantes :" & vbCrLf & Mess
MsgBox Mess
End If
Call TCD
End Sub
Merci pour l'aide, avec ce code ça marche bien pour le remplissage. Ce qui est bizarre c'est que ma ligne en doublon dans l'onglet TCD n’apparaît que quand j'exécute la fonction avec le bouton . Y aurait-il un bug dû à l'utilisation du bouton ?
J'ai résolu le problème en intégrant une suppression des doublons. Merci et bonne soirée
Avec le bouton tu appelles d'autre Sub() comme la suppression des feuilles, copie des entêtes, etc...