Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i)) Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée sur
une ligne. Le code est assez simple et fait appel à un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la colonne
en question est masquée ! Pourtant, la boucle est bien
exécutée, mais lorsqu'il arrive sur la cellule non vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc
-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2
If Not IsEmpty(.Offset(0, i)) Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.
Bonjour,
Je cherche à identifier la dernière cellule occupée sur
une ligne. Le code est assez simple et fait appel à un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la colonne
en question est masquée ! Pourtant, la boucle est bien
exécutée, mais lorsqu'il arrive sur la cellule non vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i)) Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée sur
une ligne. Le code est assez simple et fait appel à un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la colonne
en question est masquée ! Pourtant, la boucle est bien
exécutée, mais lorsqu'il arrive sur la cellule non vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
de
VRAi et/ou FAUX selon que la cellule correspondante
contient
quelque chose ou non. COLONNE() renvoie le numéro de
colonne
des cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-
lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barre
de formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formule
en la surlignant dans la barre de formules et en appuyant
sur
F9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i))
Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée
sur
une ligne. Le code est assez simple et fait appel à
un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonne
en question est masquée ! Pourtant, la boucle est
bien
exécutée, mais lorsqu'il arrive sur la cellule non
vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
de
VRAi et/ou FAUX selon que la cellule correspondante
contient
quelque chose ou non. COLONNE() renvoie le numéro de
colonne
des cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-
lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barre
de formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formule
en la surlignant dans la barre de formules et en appuyant
sur
F9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.
Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc
-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2
If Not IsEmpty(.Offset(0, i))
Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.
Bonjour,
Je cherche à identifier la dernière cellule occupée
sur
une ligne. Le code est assez simple et fait appel à
un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonne
en question est masquée ! Pourtant, la boucle est
bien
exécutée, mais lorsqu'il arrive sur la cellule non
vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
de
VRAi et/ou FAUX selon que la cellule correspondante
contient
quelque chose ou non. COLONNE() renvoie le numéro de
colonne
des cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-
lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barre
de formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formule
en la surlignant dans la barre de formules et en appuyant
sur
F9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i))
Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée
sur
une ligne. Le code est assez simple et fait appel à
un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonne
en question est masquée ! Pourtant, la boucle est
bien
exécutée, mais lorsqu'il arrive sur la cellule non
vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Merci beaucoup, c'est effectivement beaucoup plus clair !!
Par contre, je suis obligé d'utiliser la formule sur la
même ligne que la zone de recherche, je vais donc bricoler
pour résoudre la référence circulaire..
Merci encore !
Jean-Luc-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
deVRAi et/ou FAUX selon que la cellule correspondante
contientquelque chose ou non. COLONNE() renvoie le numéro de
colonnedes cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barrede formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formuleen la surlignant dans la barre de formules et en appuyant
surF9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i))
ThenMaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée
surune ligne. Le code est assez simple et fait appel à
unbanal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonneen question est masquée ! Pourtant, la boucle est
bienexécutée, mais lorsqu'il arrive sur la cellule non
vide,le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Merci beaucoup, c'est effectivement beaucoup plus clair !!
Par contre, je suis obligé d'utiliser la formule sur la
même ligne que la zone de recherche, je vais donc bricoler
pour résoudre la référence circulaire..
Merci encore !
Jean-Luc
-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
de
VRAi et/ou FAUX selon que la cellule correspondante
contient
quelque chose ou non. COLONNE() renvoie le numéro de
colonne
des cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-
lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barre
de formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formule
en la surlignant dans la barre de formules et en appuyant
sur
F9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.
Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc
-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2
If Not IsEmpty(.Offset(0, i))
Then
MaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.
Bonjour,
Je cherche à identifier la dernière cellule occupée
sur
une ligne. Le code est assez simple et fait appel à
un
banal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonne
en question est masquée ! Pourtant, la boucle est
bien
exécutée, mais lorsqu'il arrive sur la cellule non
vide,
le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
Merci beaucoup, c'est effectivement beaucoup plus clair !!
Par contre, je suis obligé d'utiliser la formule sur la
même ligne que la zone de recherche, je vais donc bricoler
pour résoudre la référence circulaire..
Merci encore !
Jean-Luc-----Message d'origine-----
Bonjour,
Tu obtiens une référence circulaire si la formule est sur
la même ligne que la ligne testée (ligne 16 ici).
Sinon, cela fonctionne ; je peux t'envoyer un exemple dans
ta Bal si tu veux.
Quant au principe, ESTVIDE() renvoie une matrice composée
deVRAi et/ou FAUX selon que la cellule correspondante
contientquelque chose ou non. COLONNE() renvoie le numéro de
colonnedes cellules.
Excel interprête VRAI comme 1, et FAUX comme 0. Le produit
est donc une matrice alternant les numéros de colonnes
des cel-lules non vides et des 0 pour les cellules vides.
La + grande valeur, renvoyée par MAX() est donc le + grand
numéro de colonne correspondant à une cellule non vide.
Par exemple dans un nouveau classeur, entre une valeur que
conque en A1, A3 et A6.
Sur une AUTRE LIGNE, entre
=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))
à valider en matricielle (Ctrl (ou Commande sur Mac) +
Enter ; la formule doit apparaître entre accolades dans
la barrede formukes :
{=MAX(NON(ESTVIDE(A1:F1)) * COLONNE(A1:F1))}
NON(ESTVIDE(A1:F1))
renvoie
{VRAI;FAUX;VRAI;FAUX;FAUX;VRAI}
équivalent à
{1;0;1;0;0;1}
et COLONNE(A1:F1)
renvoie
{1;2;3;4;5;6}
Le produit des 2 est
{1;0;3;0;0;6}
Et la formule matricielle compète (avec MAX) renvoie 6.
NB - tu peux vérifier le résultat d'une partie de la
formuleen la surlignant dans la barre de formules et en appuyant
surF9 (Win) ou Commande + "=" (Mac)
J'espère que cela te paraîtra + clair.Merci beaucoup !
La syntaxe If Not IsEmpty(...) fonctionne très bien mais
je n'ai 1) pas compris et 2) pas réussi à faire
fonctionner l'autre proposition (que j'aurais pourtant
préférée) =MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16)) !
Es tu sûr de cette formule, car j'obtiens un 'référence
circulaire error' !..
Merci de ton aide !
Jean-Luc-----Message d'origine-----
Bonjour Jean-Luc,
Pas de problème chez moi avec ce code :
Sub DerCellLigne()
Dim i As Integer, MaxCol As Integer
With ActiveCell
For i = 0 To
ActiveSheet.UsedRange.Columns.Count +
ActiveSheet.UsedRange.Column - 2If Not IsEmpty(.Offset(0, i))
ThenMaxCol = i + 1
End If
Next i
End With
MsgBox MaxCol
End Sub
Tu peux également obtenir le résultat sans VBA :
pour la ligne 16 :
=MAX(NON(ESTVIDE(16:16)) * COLONNE(16:16))
à valider en matricielle
ou mieux encore, en passant par une indirection et
en mettant le numéro de ligne en A1 :
=MAX(NON(ESTVIDE(INDIRECT(A1 & ":" & A1))) * COLONNE
(INDIRECT(A1 & ":" & A1)))
à valider également en matricielle, bien sûr.Bonjour,
Je cherche à identifier la dernière cellule occupée
surune ligne. Le code est assez simple et fait appel à
unbanal : Cells(i,j) <> "".
Je viens de découvrir qu'il ne trouve rien si la
colonneen question est masquée ! Pourtant, la boucle est
bienexécutée, mais lorsqu'il arrive sur la cellule non
vide,le test if (Cells(i,j) <> "") ne déclenche pas !
N'est-ce pas un bug d'Excel ?
Merci d'avance pour votre aide !
Jean-Luc
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
.