Besoin aide module VBA
Résolu
Brucks92
Messages postés
3
Statut
Membre
-
Brucks92 Messages postés 3 Statut Membre -
Brucks92 Messages postés 3 Statut Membre -
Bonjour,
J'ai un petit souci sur un module VBA que je suis en train de faire, dont voici le code :
Option Explicit
Public Sub Nettoyage()
Dim Ref() As String
Dim i As Integer
Dim X As Integer
Dim c As Object
Dim Plage As String
Dim firstAddress As String
ReDim Ref(500)
With ActiveSheet.Range("A1:A1000")
Set c = .Find("Total", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
i = 0
Do
Ref(i) = c.Row & ":" & c.Row
Set c = .FindNext(c)
i = i + 1
Loop While Not c Is Nothing And c.Address <> firstAddress
i = i - 1
ReDim Preserve Ref(i)
End If
End With
' Worksheets(1).Activate
Plage = Join(Ref, ",")
ActiveSheet.Range(Plage).Select
Selection.Delete Shift:=xlUp
End Sub
Tout fonctionne correctement jusqu'à "ActiveSheet.Range(Plage).Select" qui génère une erreur 1004, erreur définie par l'application ou par l'objet.
Le code avait parfaitement fonctionner lors de la création directement comme sub de feuille mais bloque en module.
L'objectif est de créer une macro complémentaire que je peux distribuer aux utilisateurs de la société et exécuter sur un fichier Excel que l'utilisateur viens d'ouvrir
Merci d'avance pour votre aide.
J'ai un petit souci sur un module VBA que je suis en train de faire, dont voici le code :
Option Explicit
Public Sub Nettoyage()
Dim Ref() As String
Dim i As Integer
Dim X As Integer
Dim c As Object
Dim Plage As String
Dim firstAddress As String
ReDim Ref(500)
With ActiveSheet.Range("A1:A1000")
Set c = .Find("Total", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
i = 0
Do
Ref(i) = c.Row & ":" & c.Row
Set c = .FindNext(c)
i = i + 1
Loop While Not c Is Nothing And c.Address <> firstAddress
i = i - 1
ReDim Preserve Ref(i)
End If
End With
' Worksheets(1).Activate
Plage = Join(Ref, ",")
ActiveSheet.Range(Plage).Select
Selection.Delete Shift:=xlUp
End Sub
Tout fonctionne correctement jusqu'à "ActiveSheet.Range(Plage).Select" qui génère une erreur 1004, erreur définie par l'application ou par l'objet.
Le code avait parfaitement fonctionner lors de la création directement comme sub de feuille mais bloque en module.
L'objectif est de créer une macro complémentaire que je peux distribuer aux utilisateurs de la société et exécuter sur un fichier Excel que l'utilisateur viens d'ouvrir
Merci d'avance pour votre aide.
4 réponses
Bonsoir,
Difficile de tester quoique ce soit sans un fichier exemple...
cjoint.com et coller ici le lien fourni.
Je m'étonne que tu aies réussi des suppressions de lignes (Selection.Delete Shift:=xlUp) sur une sélection multiple (?)
Pourquoi tu ne supprimes pas ta ligne lorsqu'elle est détectée tout simplement ? (ne plus utiliser le .FindNext)
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Difficile de tester quoique ce soit sans un fichier exemple...
cjoint.com et coller ici le lien fourni.
Je m'étonne que tu aies réussi des suppressions de lignes (Selection.Delete Shift:=xlUp) sur une sélection multiple (?)
Pourquoi tu ne supprimes pas ta ligne lorsqu'elle est détectée tout simplement ? (ne plus utiliser le .FindNext)
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Merci pour ta réponse.
Dans l'ordre, je peux te mettre le fichier, mais ca apportera pas grand chose. Il y a juste dans ce fichier "Total" en colonne A tous les x lignes que je veux supprimer.
La suppression multiple marche impec et tu peux mettre même directement un ActiveSheet.Range(Plage).Delete.
En fait, c'est ce que je pensais faire au départ, de supprimer directement les lignes via la recherche mais ça ne marche pas avec cette méthode (with).
L'idée effectivement serait de faire une recherche dans la colonne A des lignes ou il y a marqué "Total", de la supprimer et de passer à l'occurrence suivante.
Dans l'ordre, je peux te mettre le fichier, mais ca apportera pas grand chose. Il y a juste dans ce fichier "Total" en colonne A tous les x lignes que je veux supprimer.
La suppression multiple marche impec et tu peux mettre même directement un ActiveSheet.Range(Plage).Delete.
En fait, c'est ce que je pensais faire au départ, de supprimer directement les lignes via la recherche mais ça ne marche pas avec cette méthode (with).
L'idée effectivement serait de faire une recherche dans la colonne A des lignes ou il y a marqué "Total", de la supprimer et de passer à l'occurrence suivante.
Re,
je peux te mettre le fichier, mais ca apportera pas grand chose.
Si, ça évite à l'intervenant d'essayer de le deviner (souvent mal) à partir des explications ou du code.
Moi j'ai souvent plus de flemme que le demandeur, ça démotive...
eric
je peux te mettre le fichier, mais ca apportera pas grand chose.
Si, ça évite à l'intervenant d'essayer de le deviner (souvent mal) à partir des explications ou du code.
Moi j'ai souvent plus de flemme que le demandeur, ça démotive...
Public Sub Nettoyage() Dim c As Range Application.ScreenUpdating = False With ActiveSheet.Range("A1:A1000") Set c = .Find("Total", LookIn:=xlValues) Do While Not c Is Nothing c.EntireRow.Delete Set c = .Find("Total", LookIn:=xlValues) Loop End With Application.ScreenUpdating = True End Sub
eric