Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : Delete rows

  • Initiateur de la discussion Initiateur de la discussion yonini
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

yonini

XLDnaute Nouveau
Bonjour à tous,

Je me permets de venir poster ici mon pb avec mon code, car je n'arrive pas à trouver pourquoi ca coince...
Mon code :
Code:
Sub Archiver_affaire()

    'Déverrouille les pages
    Worksheets("Saisie").Unprotect
    Worksheets("Donnees").Unprotect
    Worksheets("Archives").Unprotect
    
    ligne = Worksheets("Saisie").Range("Ligne_Aff_Ref")
    ' Prochaine ligne disponible
    ligne_archive = Worksheets("Archives").Range("Nb_Affaires_Archives") + 5
    Affaire = Sheets("Saisie").Range("Saisie_MO") + " - " + Sheets("Saisie").Range("Saisie_Nom") + " - " + Sheets("Saisie").Range("Saisie_Ville") + " - " + Sheets("Saisie").Range("Saisie_Archi")

    If MsgBox("Etes-vous sûr de vouloir archiver l'affaire " & Affaire & " ?", vbYesNo) = vbYes Then
        Worksheets("Donnees").Rows(ligne).Copy
        Application.DisplayAlerts = False
        Worksheets("Archives").Paste (Worksheets("Archives").Rows(ligne_archive))
        Application.DisplayAlerts = True
       
        'Supprime l'affaire du tableau données
        Worksheets("Donnees").Rows(ligne).Delete Shift:=xlUp
        
        'Evite la mise à jour de l'affaire sur l'affaire suivante
        Worksheets("Saisie").Range("Ligne_Aff_Ref") = 0
        
        'Met la liste des affaires à jour
        Worksheets("Saisie").Activate
        Call Remplir_Liste_Affaire
        MsgBox ("L'archivage de l'affaire a été effectuée")
    
    Else
        MsgBox ("L'affaire n'a pas été archivée")

    End If
    
   'Verrouille les pages
   Worksheets("Saisie").Protect
   Worksheets("Donnees").Protect
   Worksheets("Archives").Protect
    
End Sub

Le soucis, c'est que j'ai un message d'erreur sur la ligne "Worksheets("Donnees").Rows(ligne).Delete Shift:=xlUp" qui me dit
"Le méthode delete de la classe Range a échoué"

J'ai fait qq tests, comme supprimer tout ce qu'il y a avant, cela fonctionne, ma ligne est supprimée, et j'ai aussi supprimé "Worksheets("Donnees").Rows(ligne).Delete Shift:=xlUp", le code marche bien...

Qq saurait-il voir où se trouve mon pb ?
Merci d'avance !
 
Re : VBA : Delete rows

Bonjour,
ligne renvoie quel type de données ?
ligne correspond t-elle à la valeur de la cellule, si tant est qu'il en ait qu'une puisqu'on en sait rien, ou à son addresse
Bref faut être devin !
A+
kjin
 
Re : VBA : Delete rows

Bonjour kjin,

"ligne" renvoie la valeur de ma case nommé "Ligne_Aff_Ref" de l'onglet Saisie.
Cela correspond à la ligne que je veux supprimer, donc une valeur (1, 2 3...).
La case "Ligne_Aff_Ref" n'est pas vide, et j'ai même fait un test juste avant ma ligne delete pour être sur que "ligne" contenait toujours la bonne valeur.
 
Re : VBA : Delete rows

Essaie d'intervertir les lignes :
Code:
       'Supprime l'affaire du tableau données
        Worksheets("Donnees").Rows(ligne).Delete Shift:=xlUp
        
        'Evite la mise à jour de l'affaire sur l'affaire suivante
        Worksheets("Saisie").Range("Ligne_Aff_Ref") = 0

Chez moi, tout marche parfaitement. Donc, la seule raison que je peux y voir, c'est que la ligne sélectionné est en mode "copie", pour supprimer ce mode, il peut simplement suffire d'éditer une autre cellule avant la suppression, ce que l'inversion des lignes peut faire...
 
Dernière édition:
Re : VBA : Delete rows

Bonjour Pierrot,

Et bien non, je n'ai pas de cellule fusionnée dans ma ligne, ni dans aucune des lignes de l'onglet Donnees...
En plus je copie de donnees à archives, qui sont deux onglets totalement identique (mise à part le contenu des lignes)
 
Re : VBA : Delete rows

Re,

il faut définir et initialiser ligne ainsi :
Code:
Dim ligne As Range
Set ligne = Worksheets("Saisie").Range("Ligne_Aff_Ref")

on ne le répètera jamais assez, ne pas déclarer et ne pas typer les variables provoquent souvent des surprises...

ensuite tu pourras "deleter" ainsi :
Code:
Worksheets("Donnees").Rows(ligne.Row).Delete Shift:=xlUp
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
712
Réponses
4
Affichages
646
Réponses
11
Affichages
842
Réponses
6
Affichages
765
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…