Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

erreur 1004 avec une listbox

1 réponse
Avatar
Christophe Ruelle
bonjour,

(sous excel 2000, win 98)
j'ai un probleme avec une listbox:
ma listbox a une source avec nombre de lignes variables. le click sur cette
listbox permet de cliquer sur un bouton pour supprimer une ligne 'source',
de remonter les autres, et d'effacer la derniere...
tant que la listbox n'est pas remplie, tout va bien, ma procedure marche au
poil. si la capacité de la listbox est plus petite que le nombre de lignes a
afficher, une barre de defilement verticale apparait tres logiquement, mais
si je descends avec cette barre, et que je selectionne une ligne qui vient
d'apparaitre, ma procedure foire "erreur 1004, la méthode clearcontents a
échoué"...
je suis perplexe, et ne sait plus quoi faire. si vous avez une idée, ou que
vous voulez plus de précisions, n'hésitez pas.
un grand merci

Christophe

________________________________________________________________

Public Sub supprimerlessai()


Sheets("variables").Activate
With Sheets("variables")
nbressais = .Range("B4").Value ' nbressais as byte
numordre = .Range("F4").Value 'numordre as byte

If nbressais = numordre Then
.Range("B" & 99 + numordre & ":DV" & 99 + numordre & "").Select
Selection.ClearContents
Application.CutCopyMode = False
Else
.Range("B" & 99 + numordre & ":DV" & 99 + numordre & "").Select
'On Error Resume Next
Selection.ClearContents
.Range("B" & 100 + numordre & ":DV" & 99 + nbressais & "").Select
Selection.Copy
.Range("B" & 99 + numordre & "").Select
ActiveSheet.Paste
.Range("B" & 99 + nbressais & ":DV" & 99 + nbressais & "").Select
Selection.ClearContents
For i = 1 To nbressais - numordre
Cells(98 + numordre + i, 2) = numordre + i - 1 & " - Colonne n°
" & .Range("DV" & 98 + numordre + i) & " - " & .Range("DU" & 98 + numordre +
i)
Next i
End If

End With
'Sheets("variables").Visible = 0
End Sub

1 réponse

Avatar
mousnynao
Bonjour,

L'erreur 1004 est une erreur de dépassement de plage.

Sur ces lignes :

nbressais = .Range("B4").Value ' nbressais as byte
numordre = .Range("F4").Value 'numordre as byte

Je vois 2 problèmes potentiels !

1.) Par défault le Range(XX).Value n'est pas de type
Byte. Par conséquent vous faite une affection
sans contrôlé le type.

2.) Outre le contrôle définit par la ligne :

If nbressais = numordre Then

Vous n'effectuez pas de contrôle direct sur ces
variables. Il serait souhaitable de valider que
les valeurs de ces variables sont dans un range
permis.

Ceci dit, à mon avis si vous réglé cette situation
ça devrait rouler :)

mousnynao!

-----Message d'origine-----
bonjour,

(sous excel 2000, win 98)
j'ai un probleme avec une listbox:
ma listbox a une source avec nombre de lignes variables.
le click sur cette

listbox permet de cliquer sur un bouton pour supprimer
une ligne 'source',

de remonter les autres, et d'effacer la derniere...
tant que la listbox n'est pas remplie, tout va bien, ma
procedure marche au

poil. si la capacité de la listbox est plus petite que le
nombre de lignes a

afficher, une barre de defilement verticale apparait tres
logiquement, mais

si je descends avec cette barre, et que je selectionne
une ligne qui vient

d'apparaitre, ma procedure foire "erreur 1004, la méthode
clearcontents a

échoué"...
je suis perplexe, et ne sait plus quoi faire. si vous
avez une idée, ou que

vous voulez plus de précisions, n'hésitez pas.
un grand merci

Christophe

__________________________________________________________
______


Public Sub supprimerlessai()


Sheets("variables").Activate
With Sheets("variables")
nbressais = .Range("B4").Value ' nbressais as byte
numordre = .Range("F4").Value 'numordre as byte

If nbressais = numordre Then
.Range("B" & 99 + numordre & ":DV" & 99 + numordre
& "").Select

Selection.ClearContents
Application.CutCopyMode = False
Else
.Range("B" & 99 + numordre & ":DV" & 99 + numordre
& "").Select

'On Error Resume Next
Selection.ClearContents
.Range("B" & 100 + numordre & ":DV" & 99 +
nbressais & "").Select

Selection.Copy
.Range("B" & 99 + numordre & "").Select
ActiveSheet.Paste
.Range("B" & 99 + nbressais & ":DV" & 99 +
nbressais & "").Select

Selection.ClearContents
For i = 1 To nbressais - numordre
Cells(98 + numordre + i, 2) = numordre + i -
1 & " - Colonne n°

" & .Range("DV" & 98 + numordre + i) & " - " & .Range
("DU" & 98 + numordre +

i)
Next i
End If

End With
'Sheets("variables").Visible = 0
End Sub


.