Completer une macro enregistree - debutant

urbanito1

XLDnaute Occasionnel
Bonjour à la communauté,

j'ai une petite macro enregistrée à laquelle je voudrais rajouter un petit complément.

deux fichiers en annex

le premier liste initiale
le second, ce que j'ai déjà fait et le complément souhaité

merci à vous

Urbanito1
 

Pièces jointes

  • liste initiale excel download1.xlsx
    11.2 KB · Affichages: 56
  • macro excel download1.xlsm
    18.6 KB · Affichages: 57

gilbert_RGI

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

Bonjour

ajoutez cette macro à votre code
Code:
[Sub sup()
For i = 1 To Sheets("liste initiale").Range("F65536").End(xlUp).Row
If Cells(i, 6).Value = 200 Then Cells(i, 6).EntireRow.Delete: i = i - 1
Next
End Sub
 

job75

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

Bonjour urbanito1, salut Gilbert,

Voyez aussi cette macro dans le fichier joint :

Code:
Sub TraiterListe()
Dim supp, h&, tablo, i&, t$, v%, p%
supp = 200 'adapter la valeur à supprimer
Application.ScreenUpdating = False
h = Cells(Rows.Count, 1).End(xlUp).Row
[B:B].Insert 'insertion de 2 colonnes
[B:B].Insert
tablo = [A1:G1].Resize(h)
For i = 1 To UBound(tablo)
  t = tablo(i, 1)
  v = InStr(t, "(")
  If v Then tablo(i, 1) = Trim(Left(t, v - 1))
  p = InStr(t, ":")
  If p Then tablo(i, 2) = Val(Mid(t, p + 1))
  If tablo(i, 7) <> supp Then tablo(i, 3) = 1
Next
[A1:G1].Resize(h) = tablo 'restitution
'tri pour avoir les cellules vides en fin de liste (suppression plus rapide)
[A1].Resize(h, Columns.Count).Sort [C1]
On Error Resume Next 'si aucune cellule vide
[C:C].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
[C:C].Delete
[A1] = "Nom Prénom"
[B1] = "Matricule Agent"
Columns("A").AutoFit 'ajustement automatique
Columns("B").AutoFit
End Sub
Elle est est très rapide même sur de très grandes listes car :

- elle utilise un tableau VBA (tablo)

- les lignes à supprimer sont placées en fin de liste grâce à un tri.

A+
 

Pièces jointes

  • Liste(1).xls
    53 KB · Affichages: 45
  • Liste(1).xls
    53 KB · Affichages: 50
  • Liste(1).xls
    53 KB · Affichages: 48

urbanito1

XLDnaute Occasionnel
Re : Completer une macro enregistree - debutant

Helo job75 et gilbert_RGI merci bien

job75 ça fonctionne nickel mais j'avoue que je ne pige pas tout..peu à peu

gilbert j'ai fait le test en rajoutant votre code

j'ai un message erreur de compilation
si je n'abuse pas , jetez un coup d'oeil si vous avez un instant
je verrai ainsi comment ajouter correctement un morceau de code à une marco

merci
urbanito1
 

Pièces jointes

  • macro excel download1avec Gilbert.xlsm
    19.3 KB · Affichages: 45

gilbert_RGI

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

juste supprimer

End Sub
Sub sup()

qui est en rouge

mais à la lecture de votre code il y a un problème d'execution

le fichier de job75 est bien plus élaboré :cool:

Edit : bonjour job75
 
Dernière édition:

urbanito1

XLDnaute Occasionnel
Re : Completer une macro enregistree - debutant

effectivement il affiche erreur d'exécution 1004
le débogage donne ceci


Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _st
:=")", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True


que convient-il de modifier?
urbanito1
 

Pièces jointes

  • macro excel download1avec Gilbert1.xlsm
    19.4 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

Bonjour urbanito1, Gilbert, le forum,

Voici une version (2) qui utilise la conversion de données :

Code:
Sub TraiterListe()
If [B1] Like "Matricule*" Then Exit Sub 'liste déjà traitée
Dim supp, h&
supp = 200 'adapter la valeur à supprimer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'si les SpecialCells n'existent pas
h = Cells(Rows.Count, 1).End(xlUp).Row
[B:B].Insert 'insertion de 2 colonnes
[B:B].Insert
[A1].Resize(h).TextToColumns [A1], xlDelimited, Other:=True, OtherChar:="("
With [B1].Resize(h)
  .TextToColumns [B1], xlDelimited, Other:=True, OtherChar:=")"
  .TextToColumns [B1], xlDelimited, Other:=True, OtherChar:=":"
  .Value = [G1].Resize(h).Value
  .Replace supp, "#N/A", LookAt:=xlWhole
  .SpecialCells(xlCellTypeConstants, 3) = 1
  'tri pour avoir les #N/A en fin de liste (suppression plus rapide)
  [A1].Resize(h, Columns.Count).Sort [B1], xlAscending
  .SpecialCells(xlConstants, 16).EntireRow.Delete
End With
[B:B].Delete
[A1] = "Nom Prénom"
[B1] = "Matricule Agent"
Columns("A:B").AutoFit 'ajustement automatique
End Sub
Testée sur 60001 lignes avec Excel 2003 : 4,3 s au lieu de 3,6 s avec la version (1) par tableau...

A+
 

Pièces jointes

  • Liste(2).xls
    53.5 KB · Affichages: 38
  • Liste(2).xls
    53.5 KB · Affichages: 48
  • Liste(2).xls
    53.5 KB · Affichages: 42

urbanito1

XLDnaute Occasionnel
Re : Completer une macro enregistree - debutant

salut job, Gilbert, le forum et merci

je viens de tester sur 91000 lignes époustouflant

si je veux choisir un autre motif...je remplace 200 par le n° du motif

mais si je souhaitais supprimer deux motifs voire plus...

supp = 200 'adapter la valeur à supprimer

que dois-je insérer à cette ligne?
 

job75

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

Re,

Pour supprimer 2 valeurs, avec la version (1) modifiez le code ainsi :

Code:
Dim supp1, supp2, h&, tablo, i&, t$, v%, p%
supp1 = 5 'adapter la valeur à supprimer
supp2 = 200 'adapter la valeur à supprimer
'------------
  If tablo(i, 7) <> supp1 And tablo(i, 7) <> supp2 Then tablo(i, 3) = 1
A+
 

job75

XLDnaute Barbatruc
Re : Completer une macro enregistree - debutant

Re,

Et avec la version (2) ce sera évidemment :

Code:
Dim supp1, supp2, h&
supp1 = 5 'adapter la valeur à supprimer
supp2 = 200 'adapter la valeur à supprimer
'------------
  .Replace supp1, "#N/A", LookAt:=xlWhole
  .Replace supp2, "#N/A"
Edit : en testant sur 60001 lignes avec Excel 2003, la durée d'exécution passe à 12 s.

Ce sont donc les Replace qui prennent beaucoup de temps...

A+
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
280

Statistiques des forums

Discussions
312 447
Messages
2 088 496
Membres
103 871
dernier inscrit
julienleburton