Pb erreur 1004

Résolu/Fermé
fab - Modifié par pijaku le 31/01/2017 à 14:10
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - 1 févr. 2017 à 08:44
Bonjour à tous,

Je rencontre ce pb et ne suis pas confirmé en vba!
Quelqu'un aurait une solution à ce problème?
J'ai un bouton avec cette macro qui me dirige vers Inputbox afin d'entrer la ligne à supprimer!
Et là : erreur d'execution '1004' : ( la methode delete de la classe range à échoué).
Je clic sur debogage et Rows(i).delete est en surbrillance jaune.


Procedure permettant la suppression
' d'un enregistrement d'une table à partir
' d'un numero ID

Sub supprimeID()

'Declaration des variable

Dim i As Integer
Dim SupprimeLigne As String

'Affectation des variables
SupprimeLigne = InputBox("Veuillez saisir la référence à supprimer", SUPPRESSION)

'On se positionne sur la feuille de la source de données
With ThisWorkbook.Sheets("SOURCE")


'Compte le nombre de ligne de la colonne C et tu remontes d'1 ligne

For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
'Si correspondance entre la reference et la ligne à supprimer ALORS
If Range("A" & i).Value = SupprimeLigne Then
Rows(i).Delete
'On supprime la ligne entière


Merci par avance

5 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 janv. 2017 à 07:29
Bonjour,

Manque le point devant range et rows

Sub supprimeID()
    'Declaration des variable
    Dim i As Integer
    Dim SupprimeLigne As String

    'Affectation des variables
    SupprimeLigne = InputBox("Veuillez saisir la référence à supprimer", SUPPRESSION)

    'On se positionne sur la feuille de la source de données
    With ThisWorkbook.Sheets("SOURCE")
        'Compte le nombre de ligne de la colonne C et tu remontes d'1 ligne
        For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            'Si correspondance entre la reference et la ligne à supprimer ALORS
            If .Range("A" & i).Value = SupprimeLigne Then
                .Rows(i).Delete
            End If
        Next i
    End With
End Sub
0
Bonjour et merci pour votre réponse.
J'ai fait un copier coller du code que vous m'avez fourni.
Toujours le même problème!
auriez-vous une idée?

Merci beaucoup
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 janv. 2017 à 14:33
Re,

auriez-vous une idée?
Sans votre fichier, pas vraiment ...
Par contre, quand vous avez l'erreur, apres le clic sur debugage, passez le curseur souris sur les variables et objets pour voir leur contenu
0
fab > f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024
31 janv. 2017 à 18:36
Merci pour m'avoir aidé. Pb résolu avec (.Range("A" & i).EntireRow.Delete)
Merci encore
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
31 janv. 2017 à 14:02
Bonjour fab,

As tu des restrictions, protection sur ta feuille?

Sinon tu peux essayer :

.Range("A" & i).EntireRow.Delete


Après en commentaire tu dis que ça compte le nombre de ligne de la colonne C mais je ne vois pas où intervient la colonne :D
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
31 janv. 2017 à 16:12
Je viens de voir que ta variable était de type String ! Tu ne peux pas demander une égalité sur deux String comme cela, il faut utiliser la fonction StrComp. (Fin je pense que tu ne peux pas haha)

Utilise ce code et arrange le pour que ça fonctionne !

If StrComp(.Range("A" & i).Value, SupprimeLigne) = 0 Then
    .Range("A" & i).EntireRow.Delete
    'Ou sinon tu peux utiliser si ça ne fonctionne pas
    '.Rows(i).Delete
End If


Si '.Range("A" & i).Value' ne te renvoie pas une valeur de type String utilise la fonction CStr comme ceci :

If StrComp(CStr(.Range("A" & i).Value), SupprimeLigne) = 0 Then
    .Range("A" & i).EntireRow.Delete
    'Ou sinon tu peux utiliser si ça ne fonctionne pas
    '.Rows(i).Delete
End If


Tiens moi au courant ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Parfait,

Mille merci ça à marché avec (.Range("A" & i).EntireRow.Delete)
Le Top du Top
Merci beaucoup;)
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 1/02/2017 à 08:45
Salut fab,

Ce fut un plaisir haha

Un petit '+' ferait plaisir et tu peux marquer le sujet comme étant résolu (en haut de la page)

Bon courage
0