Première occurrence dans plage variable

be090129

XLDnaute Nouveau
Bonjour à tous,

ma problématique est la suivante :

je souhaite conserver le première cellule de la colonne A différente de 0 dans chaque intervalle défini par ma colonne B.

C est assez difficile à décrire mais avec la pièce jointe c'est beaucoup plus clair. Dans le fichier, le colonne C en jaune est le résultat que je souhaite obtenir.

Je suis passé par des
Code:
INDEX(A:A;EQUIV(VRAI;A:A<>0;0)
mais il ne tient pas compte de mon intervalle, ... rien à faire.

Merci pour votre aide
 

Pièces jointes

  • exemple.xls
    23.5 KB · Affichages: 49
  • exemple.xls
    23.5 KB · Affichages: 46
  • exemple.xls
    23.5 KB · Affichages: 48

klin89

XLDnaute Accro
Re : Première occurrence dans plage variable

Bonsoir be090129 et bienvenue sur le forum,

Sans conviction et en sortant ma boule de cristal :rolleyes:
Feuil1, le résultat est renvoyé en colonne D au regard de la colonne C pour comparaison.

VB:
Sub Test()
Dim i As Long, Derli As Long, x As String
Derli = Range("B" & Rows.Count).End(xlUp).Row
i = 1: x = ""
Do Until i = Derli + 1
  If IsNumeric(Cells(i, 1)) And Cells(i, 1) <> "" And Cells(i, 2) <> x Then
    Cells(i, 4) = Cells(i, 1)
    x = Cells(i, 2)
  Else
    Cells(i, 4) = 0
  End If
  i = i + 1
Loop
End Sub

Au vue des données figurant en colonne A, je n'est pas trouvé mieux que la condition ci-dessous pour tester les valeurs.
If IsNumeric(Cells(i, 1)) And Cells(i, 1) <> ""
Au final, je doute que cela puisse suffire :p

Klin89
 

klin89

XLDnaute Accro
Re : Première occurrence dans plage variable

Re be090129,

VB:
Sub Test2()
Dim C As Range, i As Long, x As String, Tablo
With Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row)
  i = 1: x = ""
  ReDim Tablo(1 To .Cells.Count)
  For Each C In .Cells
    If IsNumeric(C) And C <> "" And C.Offset(o, 1) <> x Then
      Tablo(i) = C: x = C.Offset(o, 1)
    Else
      Tablo(i) = 0
    End If
    i = i + 1
  Next
  Range("D1").Resize(UBound(Tablo)) = Application.Transpose(Tablo)
End With
End Sub

Klin89
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Première occurrence dans plage variable

Bonjour be090129,

Un essai par formule.

Les cellules C2, D2, E2 contiennent des formules matricielles à copier vers le bas.
La cellule F2 (résultat) contient une formule normale à copier vers le bas.
Les colonnes C à E peuvent par le suite être masquées.

Formule matricielle en C2:
Code:
=MAX(SI($B$1:B1=$B$2:B2;"";LIGNE($B$2:B2)))
Formule matricielle en D2:
Code:
=MIN(SI(B2:$B$16000<>B3:$B$16001;LIGNE(B2:$B$16000);""))
Formule matricielle en E2:
Code:
=EQUIV(VRAI;ESTNUM(CNUM(SUPPRESPACE(INDIRECT("A" & C2 & ":A" & D2))));0)
Formule normale en F2 (résultat):
Code:
=SI(LIGNES(INDIRECT("A" & C2 & ":A" & LIGNE()))=E2;SI(ESTNUM(CNUM(SUPPRESPACE(A2)));CNUM(SUPPRESPACE(A2));"");"")
Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
 

Pièces jointes

  • Première occurrence dans plage variable v1.xls
    212.5 KB · Affichages: 31

be090129

XLDnaute Nouveau
Re : Première occurrence dans plage variable

Bonjour mapomme, bonjour klin89,

merci à vous pour vos réponses. Les deux fonctionnent parfaitement j'utilise la macro VBA de klin89 car vraiment très rapide. Avec la formule cela prend beaucoup plus de temps mais merci beaucoup de ton aide.

Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 810
Membres
104 671
dernier inscrit
Guilbry