OVH Cloud OVH Cloud

Range(Columns...).Delete fait des siennes

6 réponses
Avatar
Gilgamesh
Bonjour,

moi pas comprendre.

Je fais l'essai de cette petite procédure permettant de supprimer des
colonnes sur un classeur d'essai :

Sub Macro1()
Dim numcolonne As Long
Worksheets("a").Activate
'Force le calcul de la colonne
ActiveSheet.Range("Numcol").Calculate
numcolonne = CLng(ActiveSheet.Range("NumCol").Value)
ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete
End Sub

Et ça marche. Donc la syntaxe, la déclaration de variable etc ne sont
pas pourave.

Mais dans une procédure plus longue et sur le vrai classeur, ça ne
marche pas : erreur d'execution 1004. Erreur définie par l'application
ou par l'objet et le surlignage du débugueur pointe sur :

ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete


sménerve...

Qqun aurait une idée ?

merci

==

6 réponses

Avatar
papou
Bonjour
Pas besoin du Range :
ActiveSheet.Columns(2).Delete
Cordialement
Pascal

"Gilgamesh" a écrit dans le message de
news:%
Bonjour,

moi pas comprendre.

Je fais l'essai de cette petite procédure permettant de supprimer des
colonnes sur un classeur d'essai :

Sub Macro1()
Dim numcolonne As Long
Worksheets("a").Activate
'Force le calcul de la colonne
ActiveSheet.Range("Numcol").Calculate
numcolonne = CLng(ActiveSheet.Range("NumCol").Value)
ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete
End Sub

Et ça marche. Donc la syntaxe, la déclaration de variable etc ne sont
pas pourave.

Mais dans une procédure plus longue et sur le vrai classeur, ça ne
marche pas : erreur d'execution 1004. Erreur définie par l'application
ou par l'objet et le surlignage du débugueur pointe sur :

ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete


sménerve...

Qqun aurait une idée ?

merci

==


Avatar
AV
Es-tu sur que la cellule "Numcol" comporte une valeur numérique ?

AV
Avatar
Gilgamesh

Bonjour
Pas besoin du Range :
ActiveSheet.Columns(2).Delete
Cordialement
Pascal


Bonjour pascal, merci de me répondre.

J'utilise le range parce que je veux supprimer de la colonne x à y et
non pas une seule colonne x. Certe je pourrais faire une boucle. Mais ce
type d'instruction (supprimer n ligne, rajouter m colonne et duppliquer
une ligne ou une colonne) est central dans mon projet. Ça me
simplifierait diablement la tache de pouvoir utiliser cette innocente
syntaxe qui est bonne en plus, quand je l'utilise de façon isolé, mais
qui bug dans une grande procédure et j'aimerais bien savoir pourquoi
srogneugneu.

:-)

a+

Avatar
Gilgamesh

Es-tu sur que la cellule "Numcol" comporte une valeur numérique ?

AV


oui, là par exemple Numcol vaut 18. ET j'ai bien pris la peine de

l'encapsuler dans CLng() pour éviter les pb de type de variable...

J'ai rajouté un espion pour NumColonne et il a bien stocké la valeur 18.


a+ et merci

Avatar
Gilgamesh

ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete


en tout cas ça marche quand je mets (dans mon exemple numcolonne = 18) :

ActiveSheet.Range(Columns(14), Columns(17))



... et ça rebloque (erreur 438 cette fois) à une instruction similaire :

ActiveSheet.Row(NumLigne1 + 1 & ":" & NumLigne - 1).Select


c'est bien la passage de variable qui cloche...

==

Avatar
michdenis
Bonjour Gilgamesh,

es-tu sûr que tu n'as pas oublié un "S" dans ta ligne de code

Remplace
ActiveSheet.Row(NumLigne1 + 1 & ":" & NumLigne - 1).Select

Par

ActiveSheet.RowS(NumLigne1 + 1 & ":" & NumLigne - 1).Select


Salutations!

"Gilgamesh" a écrit dans le message de news:

ActiveSheet.Range(Columns(14), Columns(numcolonne - 1)).Delete


en tout cas ça marche quand je mets (dans mon exemple numcolonne = 18) :

ActiveSheet.Range(Columns(14), Columns(17))



... et ça rebloque (erreur 438 cette fois) à une instruction similaire :

ActiveSheet.Row(NumLigne1 + 1 & ":" & NumLigne - 1).Select


c'est bien la passage de variable qui cloche...

==