2007 & VBa : recopie dans une colonne aprés un filtre
1 réponse
le Nordiste
Bonsoir,
J'ai un tableau de donn=E9es A1:AA16000, par exemple
Je filtre sur une valeur de la colonne F par exemple.
Je place dans la premi=E8re cellule visible de la colonne P une
=E9quation.
Je veux recopier cette =E9quation que dans les cellules visibles de la
colonne P .
Et tout cela en VB
Je n'y arrive pas mais avec votre aide surement,
avec mes remerciements anticip=E9s.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour,
Un exemple de macro :
La macro fait appel à la méthode "SpecialCells" d'un objet "Range". Lorsque l'on travaille sur une grande plage de cellules, cette dernière à une limite et cela dépend du nombre de plages de cellules qui ne sont pas adjacentes. Pour contourner cette limite, j'ai présenté une variable "Pas" qui sert à déterminer le nombre de ligne que la méthode "SpecialCells" travaillera à chaque boucle. Comme je ne connais pas cette limite de façon précise, J'ai utilisé au hasard le chiffre 1000. Si ça t'intéresse, tu pourrais faire des tests avec différentes valeurs de "Pas".... Tu dois adapter le nom de la feuille à 2 endroits dans la procédure.
'------------------------------------------------- Sub test() Dim DerLig As Long, A As Long Dim Rg As Range, Nb As Long, Pas As Integer Dim R As Range, ModCalcul As String, T As Long ModCalcul = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False
Pas = 1000
With Worksheets("Feuil1") 'nom feuille à adapter 'Dernière ligne occupée dans la feuille. DerLig = .Range("A:AA").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row Set Rg = .Range("F1:F" & DerLig) 'Nombre de lignes T = Rg.Rows.Count 'Nb = Nombre de boucles Nb = Application.Ceiling(T / Pas, 1) End With
With Rg 'application du filtre sur la colonne F:F .AutoFilter field:=1, Criteria1:="toto1" End With 'Se place sur la première ligne en P2 'répondant au critère du filtre pour la formule Set Rg = Rg.Offset(1, 10).Resize(1)
'y insère la formule désirée Rg.Formula = "=" & Rg.Address(0, 0) On Error Resume Next 'boucle sur toute la colonne P For A = 1 To Nb If Rg(Rg.Rows.Count).Row + Pas > T Then Pas = T - Rg(Rg.Rows.Count).Row End If Set R = Rg(Rg.Rows.Count + 1, 1).Resize(Pas) Set Rg = R With R.SpecialCells(xlCellTypeVisible) 'Copie de la formule. .Formula = "=" & R(1).Address(0, 0) End With Next 'Affiche toutes les données Worksheets("Feuil1").ShowAllData Application.Calculation = ModCalcul Application.ScreenUpdating = True End Sub '-------------------------------------------------
MichD -------------------------------------------- "le Nordiste" a écrit dans le message de groupe de discussion :
Bonsoir,
J'ai un tableau de données A1:AA16000, par exemple Je filtre sur une valeur de la colonne F par exemple. Je place dans la première cellule visible de la colonne P une équation. Je veux recopier cette équation que dans les cellules visibles de la colonne P . Et tout cela en VB
Je n'y arrive pas mais avec votre aide surement, avec mes remerciements anticipés.
Le Nordiste
Bonjour,
Un exemple de macro :
La macro fait appel à la méthode "SpecialCells" d'un objet "Range".
Lorsque l'on travaille sur une grande plage de cellules, cette dernière
à une limite et cela dépend du nombre de plages de cellules qui ne
sont pas adjacentes.
Pour contourner cette limite, j'ai présenté une variable "Pas" qui sert
à déterminer le nombre de ligne que la méthode "SpecialCells" travaillera
à chaque boucle.
Comme je ne connais pas cette limite de façon précise, J'ai utilisé au hasard
le chiffre 1000. Si ça t'intéresse, tu pourrais faire des tests avec différentes
valeurs de "Pas"....
Tu dois adapter le nom de la feuille à 2 endroits dans la procédure.
'-------------------------------------------------
Sub test()
Dim DerLig As Long, A As Long
Dim Rg As Range, Nb As Long, Pas As Integer
Dim R As Range, ModCalcul As String, T As Long
ModCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Pas = 1000
With Worksheets("Feuil1") 'nom feuille à adapter
'Dernière ligne occupée dans la feuille.
DerLig = .Range("A:AA").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("F1:F" & DerLig)
'Nombre de lignes
T = Rg.Rows.Count
'Nb = Nombre de boucles
Nb = Application.Ceiling(T / Pas, 1)
End With
With Rg
'application du filtre sur la colonne F:F
.AutoFilter field:=1, Criteria1:="toto1"
End With
'Se place sur la première ligne en P2
'répondant au critère du filtre pour la formule
Set Rg = Rg.Offset(1, 10).Resize(1)
'y insère la formule désirée
Rg.Formula = "=" & Rg.Address(0, 0)
On Error Resume Next
'boucle sur toute la colonne P
For A = 1 To Nb
If Rg(Rg.Rows.Count).Row + Pas > T Then
Pas = T - Rg(Rg.Rows.Count).Row
End If
Set R = Rg(Rg.Rows.Count + 1, 1).Resize(Pas)
Set Rg = R
With R.SpecialCells(xlCellTypeVisible)
'Copie de la formule.
.Formula = "=" & R(1).Address(0, 0)
End With
Next
'Affiche toutes les données
Worksheets("Feuil1").ShowAllData
Application.Calculation = ModCalcul
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------
MichD
--------------------------------------------
"le Nordiste" a écrit dans le message de groupe de discussion :
53789e02-5b1e-44b3-8f25-871f89aa4c6c@o10g2000vbg.googlegroups.com...
Bonsoir,
J'ai un tableau de données A1:AA16000, par exemple
Je filtre sur une valeur de la colonne F par exemple.
Je place dans la première cellule visible de la colonne P une
équation.
Je veux recopier cette équation que dans les cellules visibles de la
colonne P .
Et tout cela en VB
Je n'y arrive pas mais avec votre aide surement,
avec mes remerciements anticipés.
La macro fait appel à la méthode "SpecialCells" d'un objet "Range". Lorsque l'on travaille sur une grande plage de cellules, cette dernière à une limite et cela dépend du nombre de plages de cellules qui ne sont pas adjacentes. Pour contourner cette limite, j'ai présenté une variable "Pas" qui sert à déterminer le nombre de ligne que la méthode "SpecialCells" travaillera à chaque boucle. Comme je ne connais pas cette limite de façon précise, J'ai utilisé au hasard le chiffre 1000. Si ça t'intéresse, tu pourrais faire des tests avec différentes valeurs de "Pas".... Tu dois adapter le nom de la feuille à 2 endroits dans la procédure.
'------------------------------------------------- Sub test() Dim DerLig As Long, A As Long Dim Rg As Range, Nb As Long, Pas As Integer Dim R As Range, ModCalcul As String, T As Long ModCalcul = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False
Pas = 1000
With Worksheets("Feuil1") 'nom feuille à adapter 'Dernière ligne occupée dans la feuille. DerLig = .Range("A:AA").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row Set Rg = .Range("F1:F" & DerLig) 'Nombre de lignes T = Rg.Rows.Count 'Nb = Nombre de boucles Nb = Application.Ceiling(T / Pas, 1) End With
With Rg 'application du filtre sur la colonne F:F .AutoFilter field:=1, Criteria1:="toto1" End With 'Se place sur la première ligne en P2 'répondant au critère du filtre pour la formule Set Rg = Rg.Offset(1, 10).Resize(1)
'y insère la formule désirée Rg.Formula = "=" & Rg.Address(0, 0) On Error Resume Next 'boucle sur toute la colonne P For A = 1 To Nb If Rg(Rg.Rows.Count).Row + Pas > T Then Pas = T - Rg(Rg.Rows.Count).Row End If Set R = Rg(Rg.Rows.Count + 1, 1).Resize(Pas) Set Rg = R With R.SpecialCells(xlCellTypeVisible) 'Copie de la formule. .Formula = "=" & R(1).Address(0, 0) End With Next 'Affiche toutes les données Worksheets("Feuil1").ShowAllData Application.Calculation = ModCalcul Application.ScreenUpdating = True End Sub '-------------------------------------------------
MichD -------------------------------------------- "le Nordiste" a écrit dans le message de groupe de discussion :
Bonsoir,
J'ai un tableau de données A1:AA16000, par exemple Je filtre sur une valeur de la colonne F par exemple. Je place dans la première cellule visible de la colonne P une équation. Je veux recopier cette équation que dans les cellules visibles de la colonne P . Et tout cela en VB
Je n'y arrive pas mais avec votre aide surement, avec mes remerciements anticipés.