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

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.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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) :rolleyes:
 
Dernière édition:

TheProdigy

XLDnaute Impliqué
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) :rolleyes:
Merci @mapomme
Ta solution fonctionne parfaitement merci pour tes explications. Merci @chris Merci le forum
Cordialement.
 

VIARD

XLDnaute Impliqué
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
 

TheProdigy

XLDnaute Impliqué
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
 

VIARD

XLDnaute Impliqué
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
 

TheProdigy

XLDnaute Impliqué
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
 

Discussions similaires

Réponses
2
Affichages
366

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof