Cette Macro marchait sous XL97 et plus sous XL2000 pourquoi ?

C

Creepy

Guest
Bonjour all,

J'avais créé une macro bien pratique sous XL97, qui marchait impecc. On a passé les micro à XL2000 et elle ne marche plus. Elle sert à supprimer toutes les lignes dont les colonnes C, D, E F, G & H sont à 0

J'ai un message erreur : Incompatibilité de type et le mot "Ligne" est surligné au niveau de la phrase : for ligne = etc ...

Kk1 peux m'aider en me disant pourquoi cela ne marche plus ?

voici le code
------------------------------------------------------------
Dim ligne As Range
Dim l2 As Integer
Dim L1 As Integer
L1 = 4
l2 = Range("a4").End(xlDown).Row
For ligne = Range("A4") To Range("a:" & l2)
If Range("C:" & L1).Value = 0 And Range("D:" & L1).Value = 0 And Range("E:" & L1).Value = 0 _
And Range("F:" & L1).Value = 0 And Range("G:" & L1).Value = 0 And Range("H:" & L1).Value = 0 Then
Rows(L1 & ":" & L1).Select
Selection.Delete Shift:=xlUp
L1 = L1 + 1

End If
Next
End Sub
---------------------------------------------------------

Merci d'avance

Creepy

End If
Next
End Sub
 
J

Jean-Marie

Guest
Bonjour Crrepy

Je ne sais pas si le message d'erreur vient d'une mauvaise déclaration de variable en effet, elles sont de type integer, l'aide en ligne dit :
Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767. Comme il y a 65536 lignes dans une feuille de calcul, déclare les deux variables L1 et L2 en long.

@+Jean-Marie

PS ça me rappel un fil mouvementé avec une démo de Thierry.
 
L

LaurentTBT

Guest
Bonsoir à tous, Salut Creepy et Jean-Marie.

Moi quelque chose me choque: c'est ta boucle For Ligne =... to..., alors que Ligne est une variable Range
Alors je suis allé voir dans l'aide à la rubrique For...Next, où est écrit ceci:
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]

L'aide précise:
counter: Variable numérique utilisée comme un compteur de boucles. Cette variable ne peut être ni une variable de type Boolean, ni un élément de tableau.

Donc ce qui me choque, c'est que ta procédure fonctionne sous excel97!!!

Voici comment je l'écrirais:

Dim ligne As integer
For ligne = 4 To Range("a4").End(xlDown).Row
If Range("C:" & Ligne).Value = 0 And Range("D:" & Ligne).Value = 0 And Range("E:" & Ligne).Value = 0 _
And Range("F:" & Ligne).Value = 0 And Range("G:" & Ligne).Value = 0 And Range("H:" & L1LigneValue = 0 Then
Rows(Ligne & ":" & Ligne).Select
Selection.Delete Shift:=xlUp
End If
Next Ligne

Où si tu veux vraiment faire une boucle sur des ranges, j'utiliserais:
For each Ligne in Range("A4:4"&l2) en conservant le reste de ta macro.

Mais peut-être ai-je tort, et il est peut-être possible de faire des boucles For i=... to ... sur des objets range?

Tout avis m'intéresse!

Bonne soirée à tous.
Laurent.
 
C

Creepy

Guest
Re all,

Effectivement c'est bizarre !! ?? !!

Mais je peux t'assurer avoir deja utilisé cette macro plusieurs fois !!

Cependant j'ai un affreux doute qui m'envahit. Aurais-je fait une une correction et je ne l'aurais pas sauvegardé ?

Je ne me souviens plus très bien cependant je ne vois que cette solution.

Merci

Creepy
 

Statistiques des forums

Discussions
312 371
Messages
2 087 705
Membres
103 647
dernier inscrit
BIKS