Si valeur = 0 alors montrer la suivante

Bonjour à tous,

Je souhaite réaliser le résultat suivant :

image

Dans une feuille1 j'ai les données de A1:C8

Je voudrais que dans une feuille2 les données se présentent comme dans E1:G5

En utilisant la formule =si(C1=0;C2;C1), cela ne fonctionne pas à plusieurs égards.

J'ai donc essayé =SI(C1=0;DECALER(C1;LIGNES($1:1)+1;0);C1), les 0 sont toujours là

image

Une idée?

Bonjour,

Avec un matricielle

32pincho.xlsx (9.01 Ko)

Grandement merci. Cela résout mon problème.

C'était trop beau...

Je viens de constater que dans certains cas, il y a des libellés (noms) qui manquent. Au même titre que les données chiffrées qui sont à 0, j'aurais souhaité qu'il n'affiche pas ces lignes là, peu importe si le montant est à 0 ou pas.

J'ai donc adapté la formule en rajoutant une condition OU mais je m'y prends mal.

=SIERREUR(SI(LIGNES($1:1)<=NB.SI($C$1:$C$15;"<>"&0);INDEX(A$1:A$15;PETITE.VALEUR(SI(OU($C$1:$C$15<>0;$B$1:$B$15<>"");LIGNE(INDIRECT("1:"&LIGNES($C$1:$C$15))));LIGNES($1:1)));"");"")

image

Qu'est-ce que je fais mal?

Encore merci

Re,

Plutôt que de faire une formule à rallonge, de plus en matricielle, une petite macro

7pincho.xlsm (15.10 Ko)

Merci beaucoup pour ton aide.

Sur le code de base :

Sub Test()

Dim i%, j%, Dl%
Dim Ws As Worksheet
Set Ws = Sheets("Feuil1")
Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
j = 1

For i = 1 To Dl
If Ws.Cells(i, "B") <> "" And Ws.Cells(i, "C") <> 0 Then
Ws.Range("A" & i & ":A" & i).Copy Ws.Cells(j, "E")
j = j + 1
End If
Next i
End Sub

Si je veux copier le résultat sur une autre feuille, dois je modifier cette partie du code ainsi?

For i = 1 To Dl
If Ws.Cells(i, "B") <> "" And Ws.Cells(i, "C") <> 0 Then
Ws.Range("A" & i & ":A" & i).Copy Ws.Cells(j, Worksheets("ListeDeParticip").Range("A2"))

Merci encore

Re,

Plutôt comme ceci

Sub Test()
  Dim i%, j%, Dl%
  Dim Ws As Worksheet
  Set Ws = Sheets("Feuil1")
  Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
  j = 2
    For i = 1 To Dl
      If Ws.Cells(i, "B") <> "" And Ws.Cells(i, "C") <> 0 Then
        Ws.Range("A" & i & ":C" & i).Copy Worksheets("ListeDeParticip").Cells(j, "A")
        j = j + 1
      End If
    Next i
End Sub

Merci beaucoup

Rechercher des sujets similaires à "valeur montrer suivante"