Microsoft 365 VBA :trouver une première ligne non vide dans une matrice

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je suis en train de chercher comment afficher la première ligne non-vide dans une plage de données pour remplacer la formule dans mon classeur (ci-joint).
Mon code est :
VB:
Sub ligne()
Dim ligdeb As Long
Dim ligdeb2 As Long
ligdeb = Sheets("Feuil1").Range("M1").End(xlDown).Row
ligdeb2 = Sheets("Feuil1").Range("N1").End(xlDown).Row
Sheets("Feuil1").Cells(1, 1) = ligdeb
Sheets("Feuil1").Cells(1, 1) = ligdeb2
End Sub

Mais je n'arrive pas à récupérer les valeur (surlignées en jaune).

Merci pour votre aide !
 

Pièces jointes

  • TEST_Valeur.xlsm
    16.6 KB · Affichages: 11

Lolote83

XLDnaute Barbatruc
Bonjour,

Voici ta macro modifiée
VB:
Sub ligne()
    Dim ligdeb As Long
    Dim ligdeb2 As Long
    ligdeb = Sheets("Feuil1").Range("M1").End(xlDown).Row
    ligdeb2 = Sheets("Feuil1").Range("N1").End(xlDown).Row
    Sheets("Feuil1").Cells(1, 1) = ligdeb
    Sheets("Feuil1").Cells(2, 1) = ligdeb2
    Sheets("Feuil1").Cells(1, 2) = Cells(ligdeb, "M")
    Sheets("Feuil1").Cells(2, 2) = Cells(ligdeb2, "N")
End Sub

Attention, il y avait certainement des espaces entre M1 et M23 car ta macro me donnait la ligne 12 (que ce soit pour la colonne M comme N)
J'ai donc effacer toutes les cellules de M1 à M23 et N1 à N25
@+ Lolote83
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Voici ta macro modifiée
VB:
Sub ligne()
    Dim ligdeb As Long
    Dim ligdeb2 As Long
    ligdeb = Sheets("Feuil1").Range("M1").End(xlDown).Row
    ligdeb2 = Sheets("Feuil1").Range("N1").End(xlDown).Row
    Sheets("Feuil1").Cells(1, 1) = ligdeb
    Sheets("Feuil1").Cells(2, 1) = ligdeb2
    Sheets("Feuil1").Cells(1, 2) = Cells(ligdeb, "M")
    Sheets("Feuil1").Cells(2, 2) = Cells(ligdeb2, "N")
End Sub

Attention, il y avait certainement des espaces entre M1 et M23 car ta macro me donnait la ligne 12 (que ce soit pour la colonne M comme N)
J'ai donc effacer toutes les cellules de M1 à M23 et N1 à N25
@+ Lolote83
Merci, super !
Comment on peut effacer des espaces via une fonction VBA, s'il vous plaît ?
Merci !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Anne-Marie,
Votre fichier est "bizarre".
La macro donne Ligdeb=Ligdeb2=12.
Si vous sélectionnez M1:M22 et faites Suppr et N1:N24 et Suppr alors cela devient bon.
Ligdeb=23, Ligdeb2=25.
Or ces cellules "semblent" vides, et elles ne le sont pas. Idem si vous cherchez la dernière ligne non vides, vous trouvez 110, ce qui est faux.
Comme toutes vos cellules semblent commencer par T, cette macro marche :
VB:
Sub ligne2()
On Error Resume Next
Sheets("Feuil1").Cells(2, 1) = Application.Match("T*", [M:M], 0)
On Error Resume Next
Sheets("Feuil1").Cells(2, 2) = Application.Match("T*", [N:N], 0)
End Sub
Par contre je n'ai pas trouvé l'origine du pb.
D'où vos données proviennent elles ? Car quelquefois lors d'import internet par ex, des caractères "parasites" sont présent.
 

vgendron

XLDnaute Barbatruc
Hello

pas sur d'avoir compris le besoin
essaie avec ce code
VB:
Sub ligne()
Dim ligdeb As Long
Dim ligdeb2 As Long
ligdeb = Sheets("Feuil1").Range("M1").End(xlDown).Row 'première ligne NON vide de la colonne M en partant du haut
ligdeb2 = Sheets("Feuil1").Range("N1").End(xlDown).Row 'première ligne NON vide de la colonne N en partant du haut
'Sheets("Feuil1").Range("A1") = ligdeb
'Sheets("Feuil1").Range("A2") = ligdeb2
formuleG = "=INDEX(M" & ligdeb & ":M57,match(true,M" & ligdeb & ":M57<>"""",0))" 'on construit  la formule sous forme de chaine de caractère. en anglais (les " deviennent des "", les ; deviennent des ,)
formuleH = "=INDEX(N" & ligdeb2 & ":N57,match(true,N" & ligdeb2 & ":N57<>"""",0))"
Range("G10").FormulaArray = formuleG 'on applique la formule MATRICIELLE à la cellule G10
Range("H10").FormulaArray = formuleH 'on applique la formule MATRICIELLE à la cellule H10
End Sub

et efface le contenu des cellules M1:M22 et N1:N23: elles ont l'air vide, mais en fait.. non.. il doit y avoir des espaces qui trainent ou des caractères spéciaux invisibles.


edit: Ouh la.. y a eu du monde entre deux refreshs : Bonjour à toutes et tous
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Pensez à bien effacer les données en dessus colonne M et N car il reste des trucs invisibles
Macro simplifiée au plus simple
Bruno
VB:
Sub ligne()
[G6] = Feuil1.Cells([M1].End(4).Row, 13)
[H6] = Feuil1.Cells([N1].End(4).Row, 14)
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
Comment effacer des "trucs" invisibles quand on ne sait pas où il sont ?
D'autant que dans ce fichier, ce ne sont ni des espaces, ni des caractères, ni des caractères spéciaux.
Car :
Equiv("*",M:M,0)=12 donc M12 est non vide
NBCAR(M12)=0 donc M12 est vide
CODE(M12)=#Valeur donc il n'y a rien en M12.
Si quelqu'un a une explication ! :)

Alors en trichant, ça, ça marche ( mais sans pour autant comprendre pourquoi ça marche ):
VB:
Sub ligne()
Dim ligdeb As Long, ligdeb2 As Long, DL As Long
DL = Range("M65500").End(xlUp).Row
Range("M1:M" & DL) = Range("M1:M" & DL).Value
DL = Range("N65500").End(xlUp).Row
Range("N1:N" & DL) = Range("N1:N" & DL).Value
ligdeb = Sheets("Feuil1").Range("M1").End(xlDown).Row
ligdeb2 = Sheets("Feuil1").Range("N1").End(xlDown).Row
Sheets("Feuil1").Cells(1, 1) = ligdeb
Sheets("Feuil1").Cells(2, 1) = ligdeb2
End Sub
Le fait de copier coller valeurs alors les "parasites" disparaissent. 😅😂🤣
 

Pièces jointes

  • TEST_Valeur (7).xlsm
    15.8 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Si quelqu'un a une explication ! :)
Hello @sylvanu

c'est un cas que j'ai déjà rencontré plusieurs fois sans jamais avoir pu trouver l'explication...
la fonction Estvide dit qu'il y a quelque chose.. mais. impossible de savoir quoi: la fonction "Code" retourne une erreur
je me suis demandé si l'origine du problème n'était pas liée au fait que la formule en G6 travaille sur la plage qui commence justement à la première cellule remplie de vide...==> c'est pas ca non plus

encore une preuve que Excel voit quelque chose.. l'outil de conversion detecte quelque chose à convertir.. mais...la encore.. c'est un échec...

peut etre un artéfact d'une version du fichier excel qui contenait quelque chose à un moment..??

Si quelqu'un a une explication, je suis preneur aussi.
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Hello @sylvanu

c'est un cas que j'ai déjà rencontré plusieurs fois sans jamais avoir pu trouver l'explication...
la fonction Estvide dit qu'il y a quelque chose.. mais. impossible de savoir quoi: la fonction "Code" retourne une erreur
je me suis demandé si l'origine du problème n'était pas liée au fait que la formule en G6 travaille sur la plage qui commence justement à la première cellule remplie de vide...==> c'est pas ca non plus

encore une preuve que Excel voit quelque chose.. l'outil de conversion detecte quelque chose à convertir.. mais...la encore.. c'est un échec...

peut etre un artéfact d'une version du fichier excel qui contenait quelque chose à un moment..??

Si quelqu'un a une explication, je suis preneur aussi.
Merci pour vos messages !

En fait, les cellules vides ne sont pas vraiment vides, ils contiennent des espaces suite à cette formule :
1673016750040.png
 

vgendron

XLDnaute Barbatruc
Sauf que dans le fichier que tu as fourni, il n'y a pas cette formule...
j'en déduit donc que tu as fait un copier collage spécial valeur avant de nous envoyer le fichier..
dans ce cas.. ca voudrait dire qu'une cellule "vidée" par formule (="" ce n'est pas un espace.. mais un "vide") n'a pas la meme valeur qu'une cellule vide.... on en découvre tous les jours avec Excel..
à confirmer quand meme... mais. la. j'ai plus le temps.. je dois me préparer pour le week end...
bon après midi et bon week end
 

Deadpool_CC

XLDnaute Accro
Bonsoir à Tous

Rien qui vais faire avancé le pb mais juste pour info et pour le Fun :

Après avoir décortiqué ton .xlsm ... il apparait que dans les données de la Sheet1 il y a plein de choses qui trainent dans le XML pour ces cellules :)
 

Pièces jointes

  • Sheet1_XLM indent..txt
    20.5 KB · Affichages: 5

Discussions similaires

Réponses
12
Affichages
452
  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
699

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123