XL 2016 fonction décaler et estnum

  • Initiateur de la discussion Initiateur de la discussion Calou83
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Calou83

XLDnaute Nouveau
Bonjour à toutes et à tous,

Je vais essayer d'exposer mon problème. j'ai un tableau avec 4 colonnes.
1579963499278.png


Je souhaiterais récupérer dans la colonne E le montant de la colonne A sur la meme ligne que le numéro de compte
j'ai utilisé la formule =SI(ESTNUM(A2);A2;"") j'ai essayé d'utiliser la fonction decaler() sans succès

Pourriez-vous m'aider ?

Je vous souhaite une belle journée
 

Pièces jointes

Merci beaucoup pour votre réponse mais cela me donne le même résultat le montant récupéré se trouve sur la même ligne que le montant de la colonne A hors je souhaiterais que ce montant se trouve sur la ligne du n° de compte correspondant.

Encore merci et bonne journée
 
Bonjour Calou83, sylvanu, laurent3372, JHA,

Voyez le fichier joint et cette fonction VBA :
VB:
Function F(libel As String, colonne As Range)
Dim i&, rc&
F = ""
i = Application.Caller.Row
rc = colonne.Rows.Count
If InStr(LCase(colonne(i)), LCase(libel)) = 0 Then Exit Function
Do
    i = i + 1
    If IsNumeric(CStr(colonne(i))) Then F = colonne(i): Exit Function
Loop While i < rc
End Function
Elle est utilisée en E2 et cellules suivantes avec la formule =F("compte";A:A)

Nota : si l'on efface A12 la boucle Do/Loop va jusqu'à i = 1048576, en 1,67 seconde chez moi.

A+
 

Pièces jointes

Pour éviter d'aller jusqu'à 1048576 si A12 est vide j'ai ajouté un test supplémentaire :
VB:
Function F(libel As String, colonne As Range)
Dim i&, rc&
F = ""
i = Application.Caller.Row
rc = colonne.Rows.Count
If InStr(LCase(colonne(i)), LCase(libel)) = 0 Then Exit Function
If Application.Count(colonne(i + 1).Resize(rc - i)) = 0 Then Exit Function
Do
    i = i + 1
    If IsNumeric(CStr(colonne(i))) Then F = colonne(i): Exit Function
Loop While i < rc
End Function
Fichier (2).
 

Pièces jointes

Bonjour,
Merci beaucoup pour cette solution. Le problème est que dans mon exemple j'ai indiqué n° compte pour simplifier mon explication. En réalité, j'indique le n° de compte ex 1001 2001 6004 etc :
Col A
1001 - XXX
texte
texte
18000

Sans VBA j'ai modifié la formule de Laurent comme suit :
Dans onglet 2 j'ai créer la liste des comptes que j'ai nommée Comptes
=SI(NON(ESTERREUR(RECHERCHEV(GAUCHE($A2;4);Comptes;1;FAUX)));SI(ESTNUM($A3);$A3;SI(ESTNUM($A4);$A4;SI(ESTNUM($A5);$A5;"")));"")

Un grand merci à vous tous
Bon dimanche
 
Bonjour à tous,

Sans liste de comptes en se servant du fait que tu as un format monétaire, un peu plus court en prime.
En E2 :
VB:
=SI(ET(ESTNUM(A2);CELLULE("format";A2)="S");DECALER($A$1;MIN(SI(ESTNUM(A3:A99);LIGNE(A3:A99);9999))-1;);"")
formule matricielle à valider avec Shift+Ctrl+Entrée
Régler A3:A99 selon le nombre maxi de lignes par compte.
eric
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
221
Réponses
2
Affichages
272
Réponses
20
Affichages
910
P
Réponses
7
Affichages
816
Pilliars
P
Retour