Ajustement copier coller
bonjour,
je souhaite demander votre aide,
j'ai crée une macro qui fais que lorsque on clique sur le bouton, elle importe des lignes d'un autre fichier, puis elle vient les coller dans mon fichier.
sauf que la taille de la table du fichier d'ou j'importe ces ligne change,
il peut contenir 900 lignes, 920, 950 ...........
comment ajuster ma macro svp.
je vous laisse regarder mon code.
merci a tous!!
''''''''''''''''''MACRO QUI IMPORTE LES PREVENTIFS DU MOIS EN COURS DU FICHIER MAINTENANCE PREVENTIVE PROGRAMMEE'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub préventifs_des_mois_en_cours() ''''''' ATTENTION: A EXECUTER UNE FOIS'''''''
Dim WB_D As Workbook
Dim REP()
Dim A%
REP = Array("T") ' declaration des noms du disque
For A = 0 To UBound(REP)
Set WB_D = Workbooks.Open(REP(A) & ":\Travaux\SUIVI\PREVENTIF\MAINTENANCE PREVENTIVE PROGRAMMEE.xlsm")
With Sheets("programme global") '.........agit sur la feuille "
'filtrer sur mois en cours
Worksheets("programme global").Range("H4").AutoFilter _
Field:=7, _
Criteria1:=xlFilterThisMonth, Operator:=xlFilterDynamic
On Error Resume Next '............................en cas d'erreur (pas de données à filtrer),on poursuit la procédure
'....copie les données visible ..........................................
Sheets("programme global").Select
Sheets("programme global").Range("b4:L988").SpecialCells(xlCellTypeVisible).Select ' comment ajuster ici, la talle de ma table augment 988...1000
Selection.Copy
' coller dans trvx en cours
Windows("TRAVAUX.xlsm").Activate
Sheets("trvx en cours").Select
Dim Ligne As Long
Ligne = Sheets("trvx en cours").Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("F" & Rows.Count).End(xlUp).Offset(1).Select
ActiveSheet.Paste
End With
'Application.DisplayAlerts = True '.....................réactive le message d'alerte
'Application.CutCopyMode = False '......................désactive la copie
Next A
End SubBonjour
A essayer
Sub préventifs_des_mois_en_cours()
Dim WB_D As Workbook
Dim REP()
Dim A%
REP = Array("T") ' declaration des noms du disque
For A = 0 To UBound(REP)
Set WB_D = Workbooks.Open(REP(A) & ":\Travaux\SUIVI\PREVENTIF\MAINTENANCE PREVENTIVE PROGRAMMEE.xlsm")
With Sheets("programme global") 'agit sur la feuille "
'filtrer sur mois en cours
.Range("H4").AutoFilter Field:=7, Criteria1:=xlFilterThisMonth, Operator:=xlFilterDynamic
On Error Resume Next 'en cas d'erreur (pas de données à filtrer),on poursuit la procédure
'copie les données visible
Dim ligne As Long
ligne = Workbooks("Travaux.xlsm").Sheets("trvx en cours").Cells(Rows.Count, 1).End(xlUp).Row + 1
'coller dans trvx en cours
.Range("b4:L" & .Range("B" & .Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy _
Workbooks("Travaux.xlsm").Sheets("trvx en cours").Range("F" & Workbooks("Travaux.xlsm").Sheets("trvx en cours").Range("F" & Ligne)
End With
'Application.DisplayAlerts = True '.....................réactive le message d'alerte
'Application.CutCopyMode = False '......................désactive la copie
Next A
End SubNB :
- A quoi sert la variable WB_D ? Vous ne l'utilisez pas plus bas
- dans la feuille trvx, j'ai supposé que la colonne B est complètement remplie car on se base sur cette colonne pour trouver la dernière ligne à copier
Cordialement
Bonjour DAN,
je vous remercie pour votre retour,
mais je ne vous pourquoi vous avez modifié mon code,
mon code est bon, il fonctionne parfaitement,
sauf que la talle de la table d'ou j'importe les lignes est variables,
c'est a dire dans mon état actuelle :
Sheets("programme global").Range("b4:L988").SpecialCells(xlCellTypeVisible).Selectla table contient 988 ligne, je filtre puis je copie ce qui est visible,
le problème est que si ma table contient plus de 988 lignes, par exemple 1000 ligne, comment ajuster ma ligne de code pour qu'elle filtre et copie selon le nombre de ligne
Sheets("programme global").Range("b4:L'Nbre de ligne variable à ajuster'").SpecialCells(xlCellTypeVisible).Selectmerci
imad
mais je ne vous pourquoi vous avez modifié mon code, mon code est bon, il fonctionne parfaitement, sauf que la talle de la table d'ou j'importe les lignes est variables,
Je vous ai évité les SELECT qui ne servent à rien dans un code.
Avec ce que je vous propose, cela tient compte de votre souci.
Avez-vous testé au moins ?
NB : dans mon dernier post, j'ai changé la ligne juste avant le END WITH en ajoutant la variable LIGNE. Donc testez sur ce code là