XL 2010 Supprimer une plage d'une ligne d'un tableau

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 !

TheProdigy

XLDnaute Impliqué
Bonjour tout le monde,

Dans mon fichier mon code supprime la ligneentière de mon tableau
VB:
OI.Rows(Maligne).EntireRow.Delete
A ce stade tout va bien. Mais ce que je veux c'est seulement la suppression d'une plage de cellule du tableau et non pas la ligne entière, alors j'ai modifié le code ci-dessus par le code ci-dessous
Code:
OI.Range(Cells(Maligne, "A"), Cells(Maligne, "O")).Delete Shift:=xlUp

La finalité est de supprimer la plage en décalant vers le haut et non pas la ligne entière. ça n'a pas marché
le message d'erreur 1004 La méthode Delete de la classe Range a échoué
upload_2018-9-17_16-38-52.png

Voilà
Merci.
 
Bonjour @adilprodigy, @chris🙂,

Si la feuille active n'est pas la feuille OI, le range échouera car vous avez préfixé le range global par OI. et pas préfixé les deux cellules définissant le range. Un range ne peut être sur une feuille (OI en l’occurrence) et être défini par deux cellules d'une autre feuille (la feuille active en l’occurrence).
Essayez:
VB:
OI.Range(OI.Cells(5, "A"), OI.Cells(5, "O")).Delete Shift:=xlUp
ou
VB:
With OI
   .Range(.Cells(5, "A"), .Cells(5, "O")).Delete Shift:=xlUp
End With

Cells attend des nombres pour désigner les colonnes pas des lettres...
Bonjour chris 😉. Chez moi, Cells avec les références des colonnes en lettre fonctionne correctement (Excel 2010) 🙄
 
Dernière édition:
Bonjour @adilprodigy, @chris🙂,

Si la feuille active n'est pas la feuille OI, le range échouera car vous avez préfixé le range global par OI. et pas préfixé les deux cellules définissant le range. Un range ne peut être sur une feuille (OI en l’occurrence) et être défini par deux cellules d'une autre feuille (la feuille active en l’occurrence).
Essayez:
VB:
OI.Range(OI.Cells(5, "A"), OI.Cells(5, "O")).Delete Shift:=xlUp
ou
VB:
With OI
   .Range(.Cells(5, "A"), .Cells(5, "O")).Delete Shift:=xlUp
End With


Bonjour chris 😉. Chez moi, Cells avec les références des colonnes en lettre fonctionne correctement (Excel 2010) 🙄
Merci @mapomme
Ta solution fonctionne parfaitement merci pour tes explications. Merci @chris Merci le forum
Cordialement.
 
Bonjour Mapomme, Chris, adilprodigy et à tous

Je viens de voir votre intervention sur la suppression d'une ligne d'un tableau.
voici ma solution, mais il me semble que je peux faire mieux.
voici un extrait.

VB:
Private Sub Bt_Supprimer_Click()
Dim r, Nb&, Ligne1&, Nbp&
Dim LigMax&, LigMin%, ColMin%, ColMax%

Nbp = Sheets("Feuil1").Cells(65000, 4).End(xlUp).Row
LigMin = 4
LigMax = Nbp
ColMin = 4
ColMax = 16

If Cbx_Id.Text = "" Then MsgBox "Aucun enregistrement à supprimer": Exit Sub
r = MsgBox("Voulez vous confirmer la suppression?", vbYesNo, "Supprimer   Enregistrement")
If r <> 6 Then Exit Sub
'----------- Suppression Emplacement -------------
'-------- si l article est en dernière ligne -----
Ligne1 = [D4].Offset(Cbx_Id.ListIndex, 0).Row
'MsgBox "Nbp=" & Nbp & "    Ligne1=" & Ligne1
If Nbp = Ligne1 Then
    Sheets("Feuil1").Range(Cells(Ligne1, ColMin), Cells(Ligne1, ColMax)).ClearContents
Else 'si non
    Worksheets("Feuil1").Range(Cells(Ligne1 + 1, ColMin), Cells(Nbp, ColMax)).Cut Worksheets("Feuil1").Cells(Ligne1, ColMin)
End If
'----- Rafraichissement Plage Tableau1 (R1C1) ----
ActiveSheet.ListObjects("Tableau1").Resize Range(Cells(LigMin - 1, ColMin), Cells(LigMax - 1, ColMax))
'------------- init paramètre -------------
Call Init
'-----------------------------------
End Sub

ce code fonctionne bien, il peut être amélioré !

A+ Jean-Paul
 
Bonjour Mapomme, Chris, adilprodigy et à tous

Je viens de voir votre intervention sur la suppression d'une ligne d'un tableau.
voici ma solution, mais il me semble que je peux faire mieux.
voici un extrait.

VB:
Private Sub Bt_Supprimer_Click()
Dim r, Nb&, Ligne1&, Nbp&
Dim LigMax&, LigMin%, ColMin%, ColMax%

Nbp = Sheets("Feuil1").Cells(65000, 4).End(xlUp).Row
LigMin = 4
LigMax = Nbp
ColMin = 4
ColMax = 16

If Cbx_Id.Text = "" Then MsgBox "Aucun enregistrement à supprimer": Exit Sub
r = MsgBox("Voulez vous confirmer la suppression?", vbYesNo, "Supprimer   Enregistrement")
If r <> 6 Then Exit Sub
'----------- Suppression Emplacement -------------
'-------- si l article est en dernière ligne -----
Ligne1 = [D4].Offset(Cbx_Id.ListIndex, 0).Row
'MsgBox "Nbp=" & Nbp & "    Ligne1=" & Ligne1
If Nbp = Ligne1 Then
    Sheets("Feuil1").Range(Cells(Ligne1, ColMin), Cells(Ligne1, ColMax)).ClearContents
Else 'si non
    Worksheets("Feuil1").Range(Cells(Ligne1 + 1, ColMin), Cells(Nbp, ColMax)).Cut Worksheets("Feuil1").Cells(Ligne1, ColMin)
End If
'----- Rafraichissement Plage Tableau1 (R1C1) ----
ActiveSheet.ListObjects("Tableau1").Resize Range(Cells(LigMin - 1, ColMin), Cells(LigMax - 1, ColMax))
'------------- init paramètre -------------
Call Init
'-----------------------------------
End Sub

ce code fonctionne bien, il peut être amélioré !

A+ Jean-Paul
Bonjour,
C'est quoi
VB:
Call Init
Merci
 
Bonjour adilprodigy et à tous

le call Init, c'est une petite routine qui réactualise les paramètres de l'User à chaque suppression.

En faite cette discussion à été bénéfique pour moi, cela m'a permis de simplifier mon code.
ce que j'avais réalisé était compliqué mais fonctionnel.
du coup voici ma nouvelle mouture.

VB:
'--------- Suppression Emplacement --------
Ligne1 = [D4].Offset(Cbx_Id.ListIndex, 0).Row
Sheets("Feuil1").Range(Cells(Ligne1, ColMin), Cells(Ligne1, ColMax)).Delete shift:=xlUp
'------------- init paramètre -------------
Call Init
'-----------------------------------
End Sub

c'est tout de même mieux, le code est simple et léger alors que je me suis cassé la tête pour mon code.

Merci à tous
A+ Jean-Paul
 
Bonjour adilprodigy et à tous

le call Init, c'est une petite routine qui réactualise les paramètres de l'User à chaque suppression.

En faite cette discussion à été bénéfique pour moi, cela m'a permis de simplifier mon code.
ce que j'avais réalisé était compliqué mais fonctionnel.
du coup voici ma nouvelle mouture.

VB:
'--------- Suppression Emplacement --------
Ligne1 = [D4].Offset(Cbx_Id.ListIndex, 0).Row
Sheets("Feuil1").Range(Cells(Ligne1, ColMin), Cells(Ligne1, ColMax)).Delete shift:=xlUp
'------------- init paramètre -------------
Call Init
'-----------------------------------
End Sub

c'est tout de même mieux, le code est simple et léger alors que je me suis cassé la tête pour mon code.

Merci à tous
A+ Jean-Paul
Merci beaucoup @VIARD
 
- 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
704
Réponses
10
Affichages
372
Retour