Copier des lignes dans un tableau de synthèse
#3
Bonjour à toutes et tous ,
Je souhaite recopier automatiquement dans l'onglet "Plan d'action" les lignes des UT 1 / 2.1 / 2.2 / 3 / 4, la recopie des lignes doit se faire uniquement si les lignes contiennent du texte dans une des colonnes J, K , L ( peu importe la ou les colonnes complétées, si au moins une des cellules des colonnes J K L est complété la recopie doit se faire)
Merci à tous pour votre aide
Bonjoour et
La procédure est à associer au bouton "Transférer des données" ?
Que fait-on des données qui seraient déjà présentes en feuille "Plan d'action" ?
On ne recopie que les 17 premières colonnes de tes feuilles "UT xx" ?
Bonjour U. Milité et merci pour ta réponse ,
La procédure est à associer au bouton "Transférer des données" ? : Oui je souhaite qu'en cliquant sur le bouton transférer les données on puisse activer le processus de recopie des données issues des UT
Que fait-on des données qui seraient déjà présentes en feuille "Plan d'action" ? le fait de cliquer sur transférer les données nettoie le tableau de plan d'action
On ne recopie que les 17 premières colonnes de tes feuilles "UT xx" ? non , pas de restriction sur le nombre de ligne, par contre, il sera possible de créer d'autres UT , comme par exemple UT 1, UT 2.2 ... Cf fichier joint plus complet en terme de données
merci pour ton aide
Re-bonjour,
On ne recopie que les 17 premières colonnes de tes feuilles "UT xx" ? non , pas de restriction sur le nombre de ligne
Je parle colonnes et tu me réponds lignes
Il me semble que le premier fichier contenait déjà les 5 feuilles "UT xx"
Re bonjour,
Je parle colonnes et tu me réponds lignes
Oops, désolé , oui on conserve les 17 colonnes pas besoin d’intégrer la colonne commentaire dans l'onglet "plan d'action"
Il me semble que le premier fichier contenait déjà les 5 feuilles "UT xx"
merci
Re,
Essaie le fichier joint
J'ai supprimé le code qui figurait dans l'objet ThisWorkbook
Teste soigneusement pour t'assurer que je n'ai rien oublié ... et toi non plus
Re,
merci pour ton retour, mais je n'ai pas la possibilité de tester j'ai une erreur 1004 lorsque je clique sur le bouton d'exécution
Il semble que l'erreur se situe au niveau du nettoyage de la page
Merci
j'ai une erreur 1004 lorsque je clique sur le bouton d'exécution
Désolé, un oubli de ma part: s'il n'y a pas de données en feuille "Plan d'action" (et que la ligne 4 est la dernière non-vide, il ne faut pas l'effacer !)
Remplace le code par celui-ci (un test ajouté en ligne 5 du code):
Sub Transfert2()
Set plan = Sheets("Plan d'action")
derlig = plan.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
If derlig > 4 Then plan.Range(plan.Cells(5, 1), plan.Cells(derlig, 21)).Clear
For Each f In Sheets
If Left(f.Name, 2) = "UT" Then
dLig = f.Cells(Rows.Count, 1).End(xlUp).Row
For lig = 5 To dLig
If Application.CountA(f.Range(f.Cells(lig, 10), f.Cells(lig, 12))) > 0 Then _
f.Range(f.Cells(lig, 1), f.Cells(lig, 17)).Copy plan.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 17)
Next lig
End If
Next f
Application.ScreenUpdating = True
End SubMerci c'est parfait pour le nettoyage,
Pour le reste c'est vraiment bien merci
Je souhaiterai ajouter un critère supplémentaire pour la recopie, je voudrais que si la valeur de colonne N (RISQUE RESIDUEL) est > 40 alors la recopie s'effectue également ,
merci
On est d'accord que dans ton exemple, les valeurs en colonne N ne dépassent jamais ce seuil ?si la valeur de colonne N (RISQUE RESIDUEL) est > 40 alors la recopie s'effectue également
Si oui, ceci devrait fonctionner:
Sub Transfert2()
Set plan = Sheets("Plan d'action")
derlig = plan.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
If derlig > 4 Then plan.Range(plan.Cells(5, 1), plan.Cells(derlig, 21)).Clear
For Each f In Sheets
If Left(f.Name, 2) = "UT" Then
dLig = f.Cells(Rows.Count, 1).End(xlUp).Row
For lig = 5 To dLig
If Application.CountA(f.Range(f.Cells(lig, 10), f.Cells(lig, 12))) > 0 Or f.Cells(lig, 14) > 40 Then _
f.Range(f.Cells(lig, 1), f.Cells(lig, 17)).Copy plan.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 17)
Next lig
End If
Next f
Application.ScreenUpdating = True
End SubOn est d'accord que dans ton exemple, les valeurs en colonne N ne dépassent jamais ce seuil ? [b]En fait il peut arriver que la valeur soit supérieure à 40si la valeur de colonne N (RISQUE RESIDUEL) est > 40 alors la recopie s'effectue également
2 cas possibles (Soit valeur = 40 soit valeur = 80 : je souhaiterai que pour les valeurs de la colonne N >= à 40 la copie s'effectue
merci [/b]
Si oui, ceci devrait fonctionner:
Sub Transfert2() Set plan = Sheets("Plan d'action") derlig = plan.Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False If derlig > 4 Then plan.Range(plan.Cells(5, 1), plan.Cells(derlig, 21)).Clear For Each f In Sheets If Left(f.Name, 2) = "UT" Then dLig = f.Cells(Rows.Count, 1).End(xlUp).Row For lig = 5 To dLig If Application.CountA(f.Range(f.Cells(lig, 10), f.Cells(lig, 12))) > 0 Or f.Cells(lig, 14) > 40 Then _ f.Range(f.Cells(lig, 1), f.Cells(lig, 17)).Copy plan.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 17) Next lig End If Next f Application.ScreenUpdating = True End Sub
On est d'accord que dans ton exemple, les valeurs en colonne N ne dépassent jamais ce seuil ?si la valeur de colonne N (RISQUE RESIDUEL) est > 40 alors la recopie s'effectue également
Si oui, ceci devrait fonctionner:
Sub Transfert2() Set plan = Sheets("Plan d'action") derlig = plan.Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False If derlig > 4 Then plan.Range(plan.Cells(5, 1), plan.Cells(derlig, 21)).Clear For Each f In Sheets If Left(f.Name, 2) = "UT" Then dLig = f.Cells(Rows.Count, 1).End(xlUp).Row For lig = 5 To dLig If Application.CountA(f.Range(f.Cells(lig, 10), f.Cells(lig, 12))) > 0 Or f.Cells(lig, 14) > 40 Then _ f.Range(f.Cells(lig, 1), f.Cells(lig, 17)).Copy plan.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 17) Next lig End If Next f Application.ScreenUpdating = True End Sub
je pense que oui
merci !
Sub Transfert2()
Set plan = Sheets("Plan d'action")
derlig = plan.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
If derlig > 4 Then plan.Range(plan.Cells(5, 1), plan.Cells(derlig, 21)).Clear
For Each f In Sheets
If Left(f.Name, 2) = "UT" Then
dLig = f.Cells(Rows.Count, 1).End(xlUp).Row
For lig = 5 To dLig
If Application.CountA(f.Range(f.Cells(lig, 15), f.Cells(lig, 17))) > 0 Or f.Cells(lig, 14) >= 40 Then _
f.Range(f.Cells(lig, 1), f.Cells(lig, 21)).Copy plan.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 21)
Next lig
End If
Next f
Application.ScreenUpdating = True
End Sub