Besoin aide module VBA

Résolu/Fermé
Brucks92 Messages postés 3 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 13 août 2012 - 10 août 2012 à 18:45
Brucks92 Messages postés 3 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 13 août 2012 - 13 août 2012 à 08:37
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.


4 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 10/08/2012 à 23:25
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.
0
Brucks92 Messages postés 3 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 13 août 2012
12 août 2012 à 19:55
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.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
12 août 2012 à 23:45
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...

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
0
Brucks92 Messages postés 3 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 13 août 2012
13 août 2012 à 08:37
Rrhhhooooo, tu roxx du poney (désolé pour l'expression)

Ca marche nickel. Merci à toi !
0