XL 2016 Macro et suppressions de lignes

Lyzzi

XLDnaute Nouveau
Bonjour à tous,

Je vous écris en désespoir de cause, faisant des tests depuis des jours et des jours sans parvenir à un résultat convenable.

Je m'explique : je dois générer plus de 250 fichiers Excel, sur lesquels je dois faire à chaque fois les mêmes manip, et cela dans un laps de temps très réduit.
Les macro m'ont paru une solution idéale, mais n'y connaissant absolument rien, il y a toujours quelque chose qui ne vas pas comme je voudrais.

Premier point qui me pose problème :
j'ai créé une macro (automatiquement, en enregistrant mes actions) pour mettre en forme le fichier tel que je le veux.
J'utilise notamment une formule SI.
Mais si le fichier que j'ai utilisé pour faire ma macro contient moins de ligne que le fichier à traiter, la formule ne s'applique sur sur le même nombre de ligne que celui de la macro.
Si au contraire il en contient plus, il me crée plein de lignes à 0.
Comment faire svp pour qu'il se contente de traiter les lignes existantes ?

Voici le code qui s'est créé :

Sub Macrofichierclient()
'
' Macrofichierclient Macro
'

'
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 15
Columns("AB:AB").Select
Selection.Cut
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("B8").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
Columns("J:J").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("J:J").ColumnWidth = 20.11
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=0,RC[-2],RC[-1])"
Range("J2").Select
Selection.AutoFill Destination:=Range("J2:J2358")
Range("J2:J2358").Select
Columns("J:J").Select
Selection.Copy
Columns("K:K").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("K1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Prix de base pièce ou mètre linéaire"
Columns("H:J").Select
Range("J1").Activate
Selection.Delete Shift:=xlToLeft
Range("N13").Select
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 15
Columns("U:U").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("V:V").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("U:U").ColumnWidth = 13.56
Selection.ColumnWidth = 16.22
Range("U2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=0,RC[-2],RC[-1])"
Range("U2").Select
Selection.AutoFill Destination:=Range("U2:U2358")
Range("U2:U2358").Select
Columns("U:U").Select
Selection.Copy
Columns("V:V").Select
ActiveSheet.Paste
ActiveWindow.ScrollRow = 4
ActiveWindow.ScrollRow = 7
ActiveWindow.ScrollRow = 21
ActiveWindow.ScrollRow = 25
ActiveWindow.ScrollRow = 28
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 42
ActiveWindow.ScrollRow = 45
ActiveWindow.ScrollRow = 52
ActiveWindow.ScrollRow = 55
ActiveWindow.ScrollRow = 62
ActiveWindow.ScrollRow = 76
ActiveWindow.ScrollRow = 93
ActiveWindow.ScrollRow = 100
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 165
ActiveWindow.ScrollRow = 176
ActiveWindow.ScrollRow = 186
ActiveWindow.ScrollRow = 220
ActiveWindow.ScrollRow = 234
ActiveWindow.ScrollRow = 244
ActiveWindow.ScrollRow = 251
ActiveWindow.ScrollRow = 282
ActiveWindow.ScrollRow = 289
ActiveWindow.ScrollRow = 303
ActiveWindow.ScrollRow = 327
ActiveWindow.ScrollRow = 337
ActiveWindow.ScrollRow = 344
ActiveWindow.ScrollRow = 358
ActiveWindow.ScrollRow = 392
ActiveWindow.ScrollRow = 416
ActiveWindow.ScrollRow = 430
ActiveWindow.ScrollRow = 533
ActiveWindow.ScrollRow = 567
ActiveWindow.ScrollRow = 770
ActiveWindow.ScrollRow = 801
ActiveWindow.ScrollRow = 856
ActiveWindow.ScrollRow = 908
ActiveWindow.ScrollRow = 942
ActiveWindow.ScrollRow = 990
ActiveWindow.ScrollRow = 1017
ActiveWindow.ScrollRow = 1028
ActiveWindow.ScrollRow = 1086
ActiveWindow.ScrollRow = 1097
ActiveWindow.ScrollRow = 1127
ActiveWindow.ScrollRow = 1189
ActiveWindow.ScrollRow = 1203
ActiveWindow.ScrollRow = 1206
ActiveWindow.ScrollRow = 1210
ActiveWindow.ScrollRow = 1237
ActiveWindow.ScrollRow = 1248
ActiveWindow.ScrollRow = 1258
ActiveWindow.ScrollRow = 1279
ActiveWindow.ScrollRow = 1361
ActiveWindow.ScrollRow = 1426
ActiveWindow.ScrollRow = 1461
ActiveWindow.ScrollRow = 1736
ActiveWindow.ScrollRow = 1760
ActiveWindow.ScrollRow = 1907
ActiveWindow.ScrollRow = 1928
ActiveWindow.ScrollRow = 2028
ActiveWindow.ScrollRow = 2038
ActiveWindow.ScrollRow = 2062
ActiveWindow.ScrollRow = 2076
ActiveWindow.ScrollRow = 2144
ActiveWindow.ScrollRow = 2162
ActiveWindow.ScrollRow = 2278
ActiveWindow.ScrollRow = 2302
ActiveWindow.ScrollRow = 2327
ActiveWindow.ScrollRow = 2278
ActiveWindow.ScrollRow = 2206
ActiveWindow.ScrollRow = 1382
ActiveWindow.ScrollRow = 1279
ActiveWindow.ScrollRow = 378
ActiveWindow.ScrollRow = 296
ActiveWindow.ScrollRow = 172
ActiveWindow.ScrollRow = 162
ActiveWindow.ScrollRow = 124
ActiveWindow.ScrollRow = 121
ActiveWindow.ScrollRow = 117
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 110
ActiveWindow.ScrollRow = 107
ActiveWindow.ScrollRow = 100
ActiveWindow.ScrollRow = 90
ActiveWindow.ScrollRow = 83
ActiveWindow.ScrollRow = 69
ActiveWindow.ScrollRow = 49
ActiveWindow.ScrollRow = 38
ActiveWindow.ScrollRow = 1
Range("V1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Prix net pièce ou mètre linéaire"
Columns("S:U").Select
Range("U1").Activate
Columns("V:V").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("S:U").Select
Range("U1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("O:R").Select
Range("R1").Activate
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
Columns("L:L").Select
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
Range("A1:U1").Select
Range("U1").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 192
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.Font.Bold = True
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.AutoFilter
Range("E13").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A1").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A2:U2358")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B16").Select
End Sub



Deuxième question portant sur la suppression des lignes.
J'ai lu beaucoup de solutions apportées ici, j'en ai testé beaucoup également, mais soit rien ne se passe (!), soit ca supprime plus que ce que je souhaite.

L'idée est de trouver un code me permettant de supprimer plusieurs lignes contenant soit MOT1, soit MOT2, soit MOT3
mais uniquement ces mots, par exemple une ligne contenant MOT1OUI ne devrait pas être supprimée (pour le moment les solutions trouvées suppriment tout ce qui contient MOT1 donc aussi ce qui contient MOT1OUI.

Voici ce que j'ai testé :

Sub test() Dim I As Integer For I = [A65000].End(xlUp).Row To 1 Step -1
If Not Cells(I, 1) .Resize(1, 6).Find("BOX2") Is Nothing Or _
Not Cells(I, 1).Find("BOX3") Is Nothing Or _
Not Cells(I, 1).Find("BOX-ACC-REHAU") Is Nothing Then Rows(I).Delete
Next I
End Sub

-----------------
Sub test()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If c Like "box2" Or c Like "box3" Then c.Rows.Delete
Next
End Sub
-----------------

Sub test()
Dim I As Integer
Application.ScreenUpdating = False
For I = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("A" & I).Value Like "*BOX2*" Then Rows(I).Delete
Next I
Application.ScreenUpdating = True
End Sub


J'espère avoir été à peu près claire dans ma demande, je vous remercie par avance de votre aide !
 

Lyzzi

XLDnaute Nouveau
Bonjour, j'étais justement en train de le charger.

Voici un exemple anonymisé et raccourci de fichier brut, tel que je le sors de mon logiciel de travail
Et un exemple du résultat auquel j'aimerais arriver, en supprimant les lignes qui contiennent par exemple les éléments suivants (entre autre) :
BOX-ACC-REHAU
BOX2-BASIC-VS
BOX2-ETAGE
BOX2-ETAGE-REHAU
BOX2-SS-REHAU
BOX2-SS-TT
BOX2-VS
BOX2-VS-REHAU
BOX3-VS
BOX3-VS-REHAU
COMP-RIVE
 

Pièces jointes

  • FICHIER BRUT.xlsx
    13.7 KB · Affichages: 1
  • FICHIER TERMINE.xlsx
    11.7 KB · Affichages: 1

Lyzzi

XLDnaute Nouveau
Bonjour François, et merci beaucoup pour votre aide !
Deux colonnes devises car notre système EDI le demande... tout n'est pas forcément logique je vous l'accorde.

Après avoir testé avec un fichier réel, je me heurte à quelques petits couacs :
- lors du calcul du prix (brut et net colonnes H et N), je perds les arrondis et les chiffres affichés sont donc incorrects
- le code EAN ne veut plus s'afficher avec tous les chiffres; même si je passe la cellule en mode "texte"

J'ai regardé le code mais je suis perdue...

Merci encore,
 
Dernière édition:

Lyzzi

XLDnaute Nouveau
Bonjour François,

Je vous remercie encore, mais je n'arrive pas à résoudre mon problème d'arrondi sur les prix, qui perdent tous les chiffres après la virgule, peut importe la mise en forme choisie (nombre, personnalisé, texte, j'ai tout essayé).

Je vous mets l'exemple en image,

Bonne journée,

Cordialement
 

Pièces jointes

  • ex 1.PNG
    ex 1.PNG
    68.1 KB · Affichages: 11
  • ex2.PNG
    ex2.PNG
    83.4 KB · Affichages: 10

fanfan38

XLDnaute Barbatruc
Le dernier fichier que tu as envoyé marche très bien chez moi ...
Attention ! La feuille "terminé" ne s'efface pas, donc les données se mettent à la suite...
Essaie d'effacer les données de la feuille "Terminé"
1668776810042.png

A+ François
 

Discussions similaires

Réponses
5
Affichages
233