Sub copie()
Set result_ligne = ActiveSheet.UsedRange.Rows(1).Find(What:="qty cmd ok")
Set plage = Range(result_ligne.Offset(1, 0), result_ligne.Offset(ActiveSheet.UsedRange.Rows.Count, 0).End(xlUp))
Set col = ActiveSheet.Range(result_ligne.Address)
Set col_1 = ActiveSheet.Range(result_ligne.Offset(0, -8).Address)
Set col_2 = ActiveSheet.Range(result_ligne.Offset(0, -11).Address)
Set col1 = ActiveSheet.Range(result_ligne.Offset(0, 6).Address)
For Each cellule In plage
If cellule > 0 Then
Set col = Application.Union(col, cellule)
Set col_1 = Application.Union(col_1, cellule.Offset(0, -8))
Set col_2 = Application.Union(col_2, cellule.Offset(0, -11))
Set col1 = Application.Union(col1, cellule.Offset(0, 6))
End If
Next cellule
Set zonecol = Application.Union(col, col_1, col_2, col1)
zonecol.Select
zonecol.Copy
Sheets("Feuil1").Activate
Sheets("Feuil1").Select
nblignes = zonecol.Count
nblignes = nblignes
'MsgBox nblignes
Range("A1").Resize(nblignes, 1).EntireRow.Insert
Rows("10:10").Insert Shift:=xlDown
Range("A1").Select
ActiveSheet.Paste
End Sub
Sub Macro1()
Sheets.Add.Name = "COPIE"
With Sheets("stats_sales_imp")
.[A1].AutoFilter Field:=12, Criteria1:="<>"
.[_FilterDataBase].SpecialCells(12).Copy Sheets("COPIE").[A1]
.AutoFilterMode = False
End With
Sheets("COPIE").Range("B:C,E:K,M:Q,S:S").Delete
End Sub
bizarre zonecol.Rows.Count donne toujours 1Bonjour,
Je suis d'accord avec Eric, Copy -> Paste doivent se suivre. Mais je vois autre chose. Je ne sais pas si je n'ai pas tout lu mais si zonecol est bien un range (plage de cellules)
nblignes = zonecol.Count ne donne pas le nombre de lignes. Pour l'avoir, il me semble qu'ici il faut mettre
nblignes = zonecol.Rows.Count
Sauf erreur de ma part dans la lecture du code proposé.
Bonne journée
merci ta methode marcheBonjour
je pense que ton resize vide le buffer, donc il n'y a plus rien à coller
1/déterminer combien de lignes à insérer
2/insérer
3/copier
4/coller
cela devrait être mieux
ca marche la 1er fois .merci.Re
bigs32
Tu as testé mon code ?
Sub Macro1()
If fex("COPIE") Then
Application.DisplayAlerts = False
Sheets("COPIE").Delete
Application.DisplayAlerts = True
Else
Sheets.Add.Name = "COPIE"
With Sheets("stats_sales_imp")
.[A1].AutoFilter Field:=12, Criteria1:="<>"
.[_FilterDataBase].SpecialCells(12).Copy Sheets("COPIE").[A1]
.AutoFilterMode = False
End With
Sheets("COPIE").Range("B:C,E:K,M:Q,S:S").Delete
End If
End Sub
Function fex(ByVal ws$) As Boolean
On Error Resume Next
fex = (Sheets(ws).Name <> "")
On Error GoTo 0
End Function
mais tu n'avais pas dit que tu exécutais la macro 2 fois(code brut de décoffrage , pas de gestion d'erreur )
quel est l'intéret de déclarer des variables ? tant que ca marcheRe
bigs32
Même question que tout à l'heure
Tu as testé la version modifiée ?
NB: en général, il est conseillé d'éviter les Select , Activate et cie
PS: dans ton code , tu ne déclares pas tes variables.
Pourquoi ?
Parce qu'un jour ça ne "marchera" pas et tu ne sauras pas pourquoi.quel est l'intéret de déclarer des variables ? tant que ca marche