VBA couper cellule active

Bonjour à tous, salut aux habitués

J'ai un souci avec une ligne de code:

Range(ActiveCell).Cut (Destination = ActiveCell.Offset(-1, 0))

Ca me met l'erreur "L'objet de la classe range à échoué"... je ne comprends vraiment pas pourquoi...

Auriez vous la solution ?

D'avance merci pour vos réponses,

Souri84

Bonjour,

C'est un problème de syntaxe. Essaye le code suivant, ça devrait marcher :

ActiveCell.Cut Destination:=ActiveCell.Offset(-1, 0)

Attention si ActiveCell est positionné sur la 1ère ligne, ce code ne marchera pas et affichera un message d'erreur.

Cdlt,

Bonjour,

tu peux introduire une sécurité

Si tu te trouves sur la première ligne, il y aura un bug

proposition :

With ActiveCell
    If .Row > 1 Then .Cut .Offset(-1, 0)
End With

Salut,

La cellule active = I4 mais elle risque de bouger (mais sans risque que ce soit I1)

J'ai essayé en mettant ActiveCell.cut mais ça me met une erreur...

Je réessaierais cette après-midi,

Merci pour vos réponses,

Souri84

Re,

As-tu essayé la solution de Félix ?

Cdlt,

Bonjour,

Juste une question. Es-tu sûr que la cellule active est I4 au moment où tu exécutes cette opération ?

A te lire

Dan

Salut,

Non je n'ai pas encore essayé la solution de Felix, que j'essaie tout de suite.

Sinon, oui je suis sur puisque voici mon code:

Sub Macro2()
Dim adresse
adresse = Range("I65000").End(xlUp).Address

Range("I3").Activate
Do
If ActiveCell.Address > adresse Then 'si l'adresse de la derniere cellule est supérieure à l'adresse de la cellule active alors tu continues sinon tu t'arrêtes
Exit Sub
Else
    Range(ActiveCell).Cut (Destination = ActiveCell.Offset(-1, 0))  'si condition remplie, couper la cellule active et la placer juste au dessus
    Range(ActiveCell.Offset(4, 0)).Select  'enfin tu actives la cellule située 4 lignes en dessous
End If
Loop
End Sub

Merci,

Souri84

Re,

Bon tu n'as pas corrigé ton code comme proposé par Raja.

Sinon essaye ceci :

Sub Macro2()
Dim adresse
adresse = Range("I65000").End(xlUp).Address
Range("I3").Activate
Do
If ActiveCell.Address > adresse Then 
Exit Sub
Else
With Range(ActiveCell.Address)
    .Cut Destination:=ActiveCell.Offset(-1, 0)
    .Offset(4, 0).Select
End With
End If
Loop
End Sub

A te relire

Dan

Edit :

ou

Sub Macro2()
Dim adresse
adresse = Range("I65000").End(xlUp).Address
Range("I3").Activate
Do While ActiveCell.Address < adresse 
With Range(ActiveCell.Address)
    .Cut Destination:=ActiveCell.Offset(-1, 0)  
    .Offset(4, 0).Select
End With
Loop
End Sub

Si j'ai corrigé comme Raja le proposé... mais ça ne fonctionne pas, donc j'ai recopié mon code d'origine....

Ca me mettais la même erreur...

Désolé, le code fonctionne bien mais pour 3 lignes alors que mon tableau en fait 75...

Dans les codes que tu m'a fourni, le code s'arrête à la ligne 9 alors que I9 n'est pas >I75...

Je vais réfléchir, merci pour cette première piste,

Je vous joindrez un fichier ce soir en rentrant, là j'ai un accès restreint...

A+

Souri84

Re,

c'est pas ceci que tu veux faire ?

Sub Macro2()
Dim adresse
adresse = Range("I65000").End(xlUp).Row
Range("I3").Activate
Do
If ActiveCell.Row > adresse Then
Exit Sub
Else
With Range(ActiveCell.Address)
.Cut Destination:=ActiveCell.Offset(-1, 0)
.Offset(4, 0).Select
End With
End If
Loop
End Sub

Amicalement

Dan

MERCI DAN !!!!! C'est exactement cela....

Je ne savais pas qu'il fallait juste prendre le numéro de ligne...

Encore merci,

Souri84

Bonsoir,

une autre solution :

Sub Macro2()
For i = 3 To [I65000].End(xlUp).Row Step 3
    With Cells(i, 9)
        .Cut .Offset(-1, 0)
    End With
Next i
End Sub
Rechercher des sujets similaires à "vba couper active"