Déterminer le numéro de ligne

Bonjour à tous,

J’ai des données un peu partout dans ma feuille et je souhaite trouver avec vba (pas de formule s-v-p) le numéro de la première ligne avec des données en colonnes : "A" et "B", autrement dit, la 1ere ligne dont les cellules en colonnes "A" et "B" ne soient pas vide.

Merci d’avance pour vos contributions.

Bonjour,

avec une fonction personnalisée.
Retourne 0 si non trouvé

Sub test()
    Dim lig1 As Long
    lig1 = ligAB
End Sub

Function ligAB()
    Dim datas, ligA As Long, ligB As Long
    ligA = Cells(Rows.Count, 1).End(xlUp).Row
    ligB = Cells(Rows.Count, 2).End(xlUp).Row
    datas = [A1:B1].Resize(Application.Max(ligA, ligB))
    For ligAB = 1 To UBound(datas)
        If datas(ligAB, 1) <> "" And datas(ligAB, 2) <> "" Then Exit For
    Next
    If ligAB > UBound(datas) Then ligAB = 0
End Function

eric

Bonjour

Une proposition de macro a lancer avec Ctrl+Maj +T après sélection d' une cellule dans la colonne où faire la recherche

Cordialement

FINDRH

12classeur1.xlsm (15.22 Ko)

re bonjour

version avec prise en compte colonne vide (merci Eriiic d'être allé au fond du pb !)

Cordialement

FINDRH

10classeur1.xlsm (15.80 Ko)

Bonjour eriiic et FINDRH,

Merci pour vos propositions respectives, elles fonctionnent toutes les deux et répondent à mes attentes.

Toutefois, j’ai une préférence pour la solution d’eriiic., elle utilise des tableaux. ==> Plus rapide.

Merci encore à tous les deux.

Cordiale poignée de mains.

Si la vitesse est primordiale tu peux l'accélérer en mettant 2 If sur 2 lignes au lieu du And qui impose de faire les 2 tests à chaque fois même si le 1er est négatif.

Rebonjour eriiic

Le test auquel vous faite référence pour mettre deux if séparément est celui-ci ?

If datas(ligAB, 1) <> "" And datas(ligAB, 2) <> "" Then Exit For

Je suis curieux de savoir comment l’écrire correctement ? à votre avis, on l’écrit comme ça :

If datas(ligAB, 1) <> "" Then
    If datas(ligAB, 2) <> "" Then
        Exit For
    End if
End if

Qu’en pensez-vous ?

Si c’est le cas, j’attends votre confirmation pour refaire les tests dans mon fichier en plaçant un Timer et faire une comparaison.

A vous lire.

oui, exactement.
Comme ça, on ne fait le 2nd test que si le 1er est positif

Bonjour à tous ,

Pour le fun, une généralisation à n colonnes. On examine les lignes à partir de la ligne 1.

La fonction s'appelle : Function LigneSansVide(X1, X2, X3, ..., Xn) avec Xi qui est soit une cellule soit une plage de cellules.

Que Xi soit une plage ou une cellule, on va considérer toutes les colonnes de la feuille qui correspondent aux colonnes de Xi.

Voir les exemples de formules en colonne J dans le classeur. Bien sûr, la fonction peut aussi s'utiliser directement dans du code VBA.

Le code de la fonction :

Function LigneSansVide(ParamArray xrg())
Application.Volatile
Dim x, nbcol&, maxlig&, y, i&, j&, avecVide As Boolean
   If IsMissing(xrg) Then Exit Function
   For Each x In xrg: nbcol = nbcol + x.Columns.Count: Next
   ReDim t(1 To nbcol)
   maxlig = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
   For Each x In xrg
      For Each y In x.EntireColumn.Columns.Resize(maxlig)
         i = i + 1: t(i) = y.Formula
      Next y
   Next x
   For i = 1 To maxlig
      avecVide = False
      For j = 1 To UBound(t)
         If t(j)(i, 1) = "" Then avecVide = True: Exit For
      Next j
      If Not avecVide Then LigneSansVide = i: Exit Function
   Next i
End Function

Bonjour mafraise,

Merci pour votre proposition, elle fonctionne très bien et donne le bon résultat dans le tableau.

Cordialement

Rebonjour Mafraise,

J’ai oublié de vous demander comment faire peut-on faire appel (en vba) à cette fonction de manière à afficher le numéro de la 1ere ligne avec cellules "A" et "B" non vides dans un Msgbox. Grand MERCI.

Bonjour,

à lire mafraise (salut ), tu peux (dois) mettre ma fonction volatile aussi si tu es amené à l'utiliser sur feuille, j'ai oublié
eric

Bonjour @Harzer , eriiic , à tous,

Pour exemple, un code possible pour afficher la ligne concernée.

Code dans Module1 :

Sub Test()
Dim prem As Long
   prem = LigneSansVide(Range("a:b"))  'colonne A et B de la feuille active
   MsgBox "Première ligne avec An et Bn non vides (0 si aucune) : " & prem
End Sub

Bonjour mafraise, Eriiic et les autres membres,

Un merci tout particulier à mafraise pour :

  • Le travail accompli et votre éfficacité.
  • Pour cette belle fonction, sa vitesse et aussi pour le fait qu’on peut élargir (à souhait) son champs de recherche sur plusieurs colonnes, Un seul mot " Merveilleux".

Cordiale poignée de mains.

Au plaisir de vous lire pour d’autres sujets ou autres occasions, qui sait!

Salutations.

Rechercher des sujets similaires à "determiner numero ligne"