deux boucle bancales

flo2002

XLDnaute Impliqué
bonjour,
j'ai de nombrexu soucis ce matin.... je dois pas etre reveiller.
J'ai deux boucle qui ne plante pas mais qui ne font pas non plus leur boulot. Une idée?


la premiere: supprime les lignes ou en E on a du vide
Dim del As Range
Dim dellign As Long
For Each del In Range("A14:A1000")
dellign = del.Row
If del.Value = "" Then Rows(dellign).Delete
Next del

la seconde: remplace le mot code par un vrai code
Dim j
Dim derlig
derlign = Range("E65536").End(xlUp).Row
For Each j In Range(Cells(14, 5), Cells(derlig + 2, 5))
If j = "Code" Then
j = j.Offset(0, -2) & j.Offset(0, -5)

End If
Next j

merci d'avance
 

JeanMarie

XLDnaute Barbatruc
Re : deux boucle bancales

Salut Flo

Tu as encore du temps, pour imaginer des codes...

Pour la première boucle
Une seule ligne
Code:
Range("A14:A1000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Pour la deuxième, n' y aurait-il pas un problème sur le nom de la variable derlign en derlig sur la 3ième ligne de ton code. Pourquoi tu n'utilises pas l'option Explicit, qui vérifie la déclaration des variables ?.

@+Jean-Marie
 

JeanMarie

XLDnaute Barbatruc
Re : deux boucle bancales

Re...

L'option Explicit doit être indiquée en entête de chaque module.

Nota : il y a une case à cocher "déclaration des variables obligatoires" dans l'onglet "editeur", des options de VBA. Dans le cas cocher, VBA mettra automatiquement Option Explicit dans les modules qui seront rajoutés.

@+Jean-Marie
 

flo2002

XLDnaute Impliqué
Re : deux boucle bancales

Merci je viens de me le mettre ca evitera certain derapage, mais sur ce module, je l'avais deja mis.

le code que tu m'as donné fonctionne trés bien,
le deuxieme malgrés la rectification me pose encore des problemes, je pense avoir mal definit j

Dim j
Dim derlig As Long
derlig = Range("E65536").End(xlUp).Row
For Each j In Range(Cells(14, 5), Cells(derlig, 5))
If j = "Code" Then
j = j.Offset(0, -2).Value & j.Offset(0, -5).Value

End If
Next j

merci encore pour tout
 

Gorfael

XLDnaute Barbatruc
Re : deux boucle bancales

salut flo2002

j'ai de nombrexu soucis ce matin.... je dois pas etre reveiller.
J'ai deux boucle qui ne plante pas mais qui ne font pas non plus leur boulot. Une idée?
une petite idée
la premiere: supprime les lignes ou en E on a du vide
Dim del As Range
Dim dellign As Long
For Each del In Range("A14:A1000")
dellign = del.Row
If del.Value = "" Then Rows(dellign).Delete
Next del
J'ai fait ta macro, sur A1:A10, en mettant les nombre de 1 à 10 dans A avec condition If del.Value <> "" Then Rows(dellign).Delete
et sans surprise, il me reste à l'écran : 2, 4, 6, 8, 10
Toujours le même problème avec la suppression, la variable n+1 devient n
et quand tu repasses sur for on passe à n+1 autrement dit l'ancienne n+2, en sautant l'actuelle (ancienne n+1) puisqu'on vient de la faire
tu peux la remplacer par
PHP:
Dim Dellign As Long
For Dellign = 1000 to 14 step -1
    If Range("A" & Dellign)= "" Then Rows(Dellign).Delete
Next Dellign
la seconde: remplace le mot code par un vrai code
Dim j
Dim derlig
derlign = Range("E65536").End(xlUp).Row
For Each j In Range(Cells(14, 5), Cells(derlig + 2, 5))
If j = "Code" Then
j = j.Offset(0, -2) & j.Offset(0, -5)
End If
Next j
moi, je modifierais :
Dim j =>
Dim J as range
Range(Cells(14, 5), Cells(derlig + 2, 5)) =>
Range(Cells(14, 5).address & ":" & Cells(derlig + 2, 5).address) ou Range("E14:E" & derlig + 2)
A+
 

flo2002

XLDnaute Impliqué
Re : deux boucle bancales

j'ai mis
Dim J As Range
Dim derlig
derlign = Range("E65536").End(xlUp).Row
For Each J In Range("E14:E" & derlig + 2)
If J = "Code" Then
J = J.Offset(0, 1) & J.Offset(0, 4)
End If
Next J

mais j'ai J=Nothing

pour l'offset je pensais que le fais de mettre -5 voulait dire 5 colonnes à gauche.(j'aurais cependant du mettre -4 je pense)

merci de vos lumieres
 

JeanMarie

XLDnaute Barbatruc
Re : deux boucle bancales

Re...

arf, c'est de ma faute
L'erreur vient de l'offset, Range("E1").offset(0,-4).address retourne l'adresse A1. En mettant -5 dans l'offset tu veux accéder à une cellule qui est non valide.

Code:
Dim J As Range
Dim derlig
derlig = Range("E65536").End(xlUp).Row
For Each J In Range("E14:E" & derlig + 2)
If J = "Code" Then
J = J.Offset(0, -1) & J.Offset(0, -4)
End If
Next J

ATTENTION, Code et code ne sont pas égaux pour VBA

@+jean-Marie
 

flo2002

XLDnaute Impliqué
Re : deux boucle bancales

Merci pour le code,
comme probleme j'avais "Code " au lieu de code.
Maintenant ca fonctionne si je met des offset positifs.
En faite les offset que je cherche son actuellement des #N/A et je pense que le bug viens de la.
 

Gorfael

XLDnaute Barbatruc
Re : deux boucle bancales

flo2002 à dit:
Merci pour le code,
comme probleme j'avais "Code " au lieu de code.
Maintenant ca fonctionne si je met des offset positifs.
En faite les offset que je cherche son actuellement des #N/A et je pense que le bug viens de la.
Re...
if ucase(j)="CODE" then
prend en compte "code" et "Code"
A+

PS if J like "code" then devrait marcher, mais pas testé
 

Discussions similaires

Réponses
11
Affichages
304
Réponses
7
Affichages
334
Réponses
21
Affichages
321

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS