And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Rebonjour Michel
Effectivement tout s'explique
A la fois le Bug que tu mentionnes et les lignes qui ne se masquent pas
La suite d'instruction :
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Nécessite qu'il y est au moins une cellule colonne M vide à trouver sinon
Bug
Comme tes lignes et certainement la cellule colonne M sont avec des
elle ne sont pas considérées comme vide par Excel
Pour éviter le Bug il faut faire précéder les lignes d'instruction par :
On Error Resume next
Ce qui donne :
On Error Resume Next
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Celà ne résoud pas le masquage des lignes avec un pseudo vide
Fort de ces éléments nouveaux je te propose ce nouveau code :
Colonne1 = "A"
Colonne2 = "L"
Balise = 1
Colonne3 = "M"
Lettre = Colonne1
On Error Resume Next
Columns(Colonne3 & ":" & Colonne3).Find(What:ºlise,
& "1"), LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
A = ActiveCell.Row
Départ = ActiveCell.Address
Séparateur = ":"
For i = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Chaine1 = Chaine1 & Lettre & ActiveCell.Row & Séparateur
Chaine2 = Chaine2 & "A" & ActiveCell.Row & Séparateur
If Séparateur = ":" Then
Lettre = Colonne2
Séparateur = ","
Else
Lettre = Colonne1
Séparateur = ":"
End If
Columns(Colonne3 & ":" & Colonne3).FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine2, 1, Len(Chaine2) - 1)).Select
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine1, 1, Len(Chaine1) - 1)).Select
Celà devrait enfin fonctionner
Sur ce lien mon exemple corrigé ainsi
http://www.cijoint.fr/cjlink.php?file=cj200807/cijHsLjf7w.xls.
J'ai inséré des formules de la colonne B à L dans les lignes de sélection
Le traitement est légèrement plus long mai c'est négligeable
Fais des essais et dis moi !!!!!
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Rebonjour Michel
Effectivement tout s'explique
A la fois le Bug que tu mentionnes et les lignes qui ne se masquent pas
La suite d'instruction :
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Nécessite qu'il y est au moins une cellule colonne M vide à trouver sinon
Bug
Comme tes lignes et certainement la cellule colonne M sont avec des
elle ne sont pas considérées comme vide par Excel
Pour éviter le Bug il faut faire précéder les lignes d'instruction par :
On Error Resume next
Ce qui donne :
On Error Resume Next
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Celà ne résoud pas le masquage des lignes avec un pseudo vide
Fort de ces éléments nouveaux je te propose ce nouveau code :
Colonne1 = "A"
Colonne2 = "L"
Balise = 1
Colonne3 = "M"
Lettre = Colonne1
On Error Resume Next
Columns(Colonne3 & ":" & Colonne3).Find(What:ºlise,
& "1"), LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
A = ActiveCell.Row
Départ = ActiveCell.Address
Séparateur = ":"
For i = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Chaine1 = Chaine1 & Lettre & ActiveCell.Row & Séparateur
Chaine2 = Chaine2 & "A" & ActiveCell.Row & Séparateur
If Séparateur = ":" Then
Lettre = Colonne2
Séparateur = ","
Else
Lettre = Colonne1
Séparateur = ":"
End If
Columns(Colonne3 & ":" & Colonne3).FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine2, 1, Len(Chaine2) - 1)).Select
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine1, 1, Len(Chaine1) - 1)).Select
Celà devrait enfin fonctionner
Sur ce lien mon exemple corrigé ainsi
http://www.cijoint.fr/cjlink.php?file=cj200807/cijHsLjf7w.xls.
J'ai inséré des formules de la colonne B à L dans les lignes de sélection
Le traitement est légèrement plus long mai c'est négligeable
Fais des essais et dis moi !!!!!
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Rebonjour Michel
Effectivement tout s'explique
A la fois le Bug que tu mentionnes et les lignes qui ne se masquent pas
La suite d'instruction :
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Nécessite qu'il y est au moins une cellule colonne M vide à trouver sinon
Bug
Comme tes lignes et certainement la cellule colonne M sont avec des
elle ne sont pas considérées comme vide par Excel
Pour éviter le Bug il faut faire précéder les lignes d'instruction par :
On Error Resume next
Ce qui donne :
On Error Resume Next
Selection.Find(What:="",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
Celà ne résoud pas le masquage des lignes avec un pseudo vide
Fort de ces éléments nouveaux je te propose ce nouveau code :
Colonne1 = "A"
Colonne2 = "L"
Balise = 1
Colonne3 = "M"
Lettre = Colonne1
On Error Resume Next
Columns(Colonne3 & ":" & Colonne3).Find(What:ºlise,
& "1"), LookIn:=xlFormulas, LookAt _
:=xlPart).Activate
A = ActiveCell.Row
Départ = ActiveCell.Address
Séparateur = ":"
For i = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Chaine1 = Chaine1 & Lettre & ActiveCell.Row & Séparateur
Chaine2 = Chaine2 & "A" & ActiveCell.Row & Séparateur
If Séparateur = ":" Then
Lettre = Colonne2
Séparateur = ","
Else
Lettre = Colonne1
Séparateur = ":"
End If
Columns(Colonne3 & ":" & Colonne3).FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine2, 1, Len(Chaine2) - 1)).Select
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
If ActiveCell.Address = Départ Then
Exit For
End If
Next
Range(Mid(Chaine1, 1, Len(Chaine1) - 1)).Select
Celà devrait enfin fonctionner
Sur ce lien mon exemple corrigé ainsi
http://www.cijoint.fr/cjlink.php?file=cj200807/cijHsLjf7w.xls.
J'ai inséré des formules de la colonne B à L dans les lignes de sélection
Le traitement est légèrement plus long mai c'est négligeable
Fais des essais et dis moi !!!!!
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Rebonjours Michel
content de t'avoir rendu service et satisfait
Pour les explications souhaitées :
1)On Error Resume next :
demande au code de sauter l'instruction qui présente une erreur et de
traiter la suite des instructions
Exemple :
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
si l'instruction ne trouve pas l'élément recherché au lieu de s'arréter
un Bug l'éxécution continue pour traiter les suivantes
La présence ou non colonne A d'une cellule vide est aléatoire il faut donc
pouvoir gérer les 2 situations
2)A = ActiveCell.Row => à Quoi nous sert ce A
Mille excuses un oubli de ma part
c'est une ligne que j'ai insérée pour connaitre la ligne de la cellule
active à ce stade du code m'aidant ainsi à résourdre des imperfections et
ainsi de peaufiner la macro
Tu peux la supprimer
3)Départ = ActiveCell.Address => on fixe une adresse dans Départ
Effectivement je lance une première recherche de cellule vide colonne A :
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
Je récupère ainsi l'adresse de la 1° cellule vide
Je lance une boucle de 1 à la dernière ligne :
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Je regarde si la ligne est totalement vide et je la masque
Je relance la recherche de cellule vide :
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
Cette opération est intérrompu si relançant la recherche d'une cellule
je retombe sur la 1° caractérisée par la variable Départ :
If ActiveCell.Address = Départ Then
Exit For
LookAt:=xlPart => est ce un sens de recherche ?
non
xlPart signifie que la recherche se fait sur une partie de la donnée de
cellule
A une recherche "PA" pourra être trouvé "PAPA" ou "PAPOU" ou "NE PAS"
Si on recherche un mot entier l'instruction devient :
LookAt:=xlWhole
A une recherche "PA" ne pourra être trouvé que "PA"
Le sens de la recherche est exprimé par After:¬tiveCell aprés la cellule
active
4)
Et je ne comprend rien à çà :
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
> And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
> Range("IV" & ActiveCell.Row).Address
Tant que les conditions sont vérifiées les instructions situées entre Do
Loop seront éxécutées
Les conditions sont :
Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value = ""
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacé j'usquà la 1° cellule non
vide
La cellule déterminée à une valeur null (pour ne pas être tributaire des
formules)
et
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacée j'usquà la 1° cellule
vide
La cellule déterminée à une Adresse différente de l'adresse de la cellule
la colonne IV et le n° de la ligne de la cellule active (dernière colonne
tableau et n° de la ligne de la cellule active)
L'instruction exécutée :
k = k + 1
C'est à dire que je fais évoluer le compteur k tant que les conditions
décrites sont respectées
Si La boucle Do loop s'arrète c'est qu'une des conditions voir les 2 n'est
plus respectées :
Soit je suis arrivé sur une cellule non null donc on ne masque pas
Soit je suis arrivé à la cellule de la dernière colonne de la feuille donc
on masque :
Avec la dernière valeur k aprés rupture de la boucle :
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Je n'ai pas pris en compte l'état de cette dernière cellule (null ou pas
null) en colonne IV
Je ne pense pas que celà soit une difficulté potentielle ton analyse de
lignes vides ne doit pas être au delà de la colonne L
Espérant avoir répondu à tes interrogations
Dis moi !!!!
Rebonjours Michel
content de t'avoir rendu service et satisfait
Pour les explications souhaitées :
1)On Error Resume next :
demande au code de sauter l'instruction qui présente une erreur et de
traiter la suite des instructions
Exemple :
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
si l'instruction ne trouve pas l'élément recherché au lieu de s'arréter
un Bug l'éxécution continue pour traiter les suivantes
La présence ou non colonne A d'une cellule vide est aléatoire il faut donc
pouvoir gérer les 2 situations
2)A = ActiveCell.Row => à Quoi nous sert ce A
Mille excuses un oubli de ma part
c'est une ligne que j'ai insérée pour connaitre la ligne de la cellule
active à ce stade du code m'aidant ainsi à résourdre des imperfections et
ainsi de peaufiner la macro
Tu peux la supprimer
3)Départ = ActiveCell.Address => on fixe une adresse dans Départ
Effectivement je lance une première recherche de cellule vide colonne A :
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
Je récupère ainsi l'adresse de la 1° cellule vide
Je lance une boucle de 1 à la dernière ligne :
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Je regarde si la ligne est totalement vide et je la masque
Je relance la recherche de cellule vide :
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
Cette opération est intérrompu si relançant la recherche d'une cellule
je retombe sur la 1° caractérisée par la variable Départ :
If ActiveCell.Address = Départ Then
Exit For
LookAt:=xlPart => est ce un sens de recherche ?
non
xlPart signifie que la recherche se fait sur une partie de la donnée de
cellule
A une recherche "PA" pourra être trouvé "PAPA" ou "PAPOU" ou "NE PAS"
Si on recherche un mot entier l'instruction devient :
LookAt:=xlWhole
A une recherche "PA" ne pourra être trouvé que "PA"
Le sens de la recherche est exprimé par After:¬tiveCell aprés la cellule
active
4)
Et je ne comprend rien à çà :
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
> And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
> Range("IV" & ActiveCell.Row).Address
Tant que les conditions sont vérifiées les instructions situées entre Do
Loop seront éxécutées
Les conditions sont :
Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value = ""
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacé j'usquà la 1° cellule non
vide
La cellule déterminée à une valeur null (pour ne pas être tributaire des
formules)
et
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacée j'usquà la 1° cellule
vide
La cellule déterminée à une Adresse différente de l'adresse de la cellule
la colonne IV et le n° de la ligne de la cellule active (dernière colonne
tableau et n° de la ligne de la cellule active)
L'instruction exécutée :
k = k + 1
C'est à dire que je fais évoluer le compteur k tant que les conditions
décrites sont respectées
Si La boucle Do loop s'arrète c'est qu'une des conditions voir les 2 n'est
plus respectées :
Soit je suis arrivé sur une cellule non null donc on ne masque pas
Soit je suis arrivé à la cellule de la dernière colonne de la feuille donc
on masque :
Avec la dernière valeur k aprés rupture de la boucle :
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Je n'ai pas pris en compte l'état de cette dernière cellule (null ou pas
null) en colonne IV
Je ne pense pas que celà soit une difficulté potentielle ton analyse de
lignes vides ne doit pas être au delà de la colonne L
Espérant avoir répondu à tes interrogations
Dis moi !!!!
Rebonjours Michel
content de t'avoir rendu service et satisfait
Pour les explications souhaitées :
1)On Error Resume next :
demande au code de sauter l'instruction qui présente une erreur et de
traiter la suite des instructions
Exemple :
On Error Resume Next
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
si l'instruction ne trouve pas l'élément recherché au lieu de s'arréter
un Bug l'éxécution continue pour traiter les suivantes
La présence ou non colonne A d'une cellule vide est aléatoire il faut donc
pouvoir gérer les 2 situations
2)A = ActiveCell.Row => à Quoi nous sert ce A
Mille excuses un oubli de ma part
c'est une ligne que j'ai insérée pour connaitre la ligne de la cellule
active à ce stade du code m'aidant ainsi à résourdre des imperfections et
ainsi de peaufiner la macro
Tu peux la supprimer
3)Départ = ActiveCell.Address => on fixe une adresse dans Départ
Effectivement je lance une première recherche de cellule vide colonne A :
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlPart).Activate
Départ = ActiveCell.Address
Je récupère ainsi l'adresse de la 1° cellule vide
Je lance une boucle de 1 à la dernière ligne :
For j = 1 To Range(Colonne3 & "65535").End(xlUp).Row
Je regarde si la ligne est totalement vide et je la masque
Je relance la recherche de cellule vide :
k = 0
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
k = k + 1
Loop
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Selection.FindNext(After:¬tiveCell).Activate
Cette opération est intérrompu si relançant la recherche d'une cellule
je retombe sur la 1° caractérisée par la variable Départ :
If ActiveCell.Address = Départ Then
Exit For
LookAt:=xlPart => est ce un sens de recherche ?
non
xlPart signifie que la recherche se fait sur une partie de la donnée de
cellule
A une recherche "PA" pourra être trouvé "PAPA" ou "PAPOU" ou "NE PAS"
Si on recherche un mot entier l'instruction devient :
LookAt:=xlWhole
A une recherche "PA" ne pourra être trouvé que "PA"
Le sens de la recherche est exprimé par After:¬tiveCell aprés la cellule
active
4)
Et je ne comprend rien à çà :
Do While Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value ""
> And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
> Range("IV" & ActiveCell.Row).Address
Tant que les conditions sont vérifiées les instructions situées entre Do
Loop seront éxécutées
Les conditions sont :
Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Value = ""
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacé j'usquà la 1° cellule non
vide
La cellule déterminée à une valeur null (pour ne pas être tributaire des
formules)
et
And Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address <>
Range("IV" & ActiveCell.Row).Address
Cellule A et le n° de la ligne de la cellule active déplacée du nombre de
colonnes représenté par la variable k et déplacée j'usquà la 1° cellule
vide
La cellule déterminée à une Adresse différente de l'adresse de la cellule
la colonne IV et le n° de la ligne de la cellule active (dernière colonne
tableau et n° de la ligne de la cellule active)
L'instruction exécutée :
k = k + 1
C'est à dire que je fais évoluer le compteur k tant que les conditions
décrites sont respectées
Si La boucle Do loop s'arrète c'est qu'une des conditions voir les 2 n'est
plus respectées :
Soit je suis arrivé sur une cellule non null donc on ne masque pas
Soit je suis arrivé à la cellule de la dernière colonne de la feuille donc
on masque :
Avec la dernière valeur k aprés rupture de la boucle :
If Range("A" & ActiveCell.Row).Offset(0, k).End(xlToRight).Address > Range("IV" & ActiveCell.Row).Address Then
ActiveCell.EntireRow.Hidden = True
End If
Je n'ai pas pris en compte l'état de cette dernière cellule (null ou pas
null) en colonne IV
Je ne pense pas que celà soit une difficulté potentielle ton analyse de
lignes vides ne doit pas être au delà de la colonne L
Espérant avoir répondu à tes interrogations
Dis moi !!!!