Decalage de cellule vers le bas a chaque cellule non-vide

Bonjour à tous,

Je souhaite, comme indiqué dans le titre, faire un décalage d'une ligne vers le bas à chaque cellule non-vide sauf la première

Merci d'avance pour vos idées

6classeur1.xlsx (11.73 Ko)

Bonjour,

En B2 puis en tirant à droite et en bas :

=SI(COLONNE(B1)=LIGNE(A2);INDIRECT("L1C"&LIGNE(2:2);FAUX);"")

Cdlt,

Bonjour Ergotamine,

Merci pour ta réponse, mais le décalage n'est qu'une étape dans une macro. est ce-que tu aurai une idée en vba ?

Bonjour,

Par VBA :

Sub DECALER()
Dim C As Byte, LC As Byte
With ActiveSheet
    LC = .Cells(1, .Columns.Count).End(xlToLeft).Column
    For C = 2 To LC
        .Cells(C, C) = .Cells(1, C)
    Next C
End With
End Sub

Cdlt,

Merci pour ta réponse. dans le fichier exemple que j'ai posté cela marche à merveille cependant je suis incapable de l'adapter a mon fichier. Pourrai tu me donné quelques explications stp . Je suis novice en vba. Je joints les fichiers originale si cela peux être plus claire. Merci d'avance

4devis-data.zip (123.09 Ko)

Bonjour,

N'ayant eu de résultat attendu je me suis basé sur la feuille HTA de votre fichier facture-2021 pour la plage B a AD car ensuite il y a des cellules fusionnées, des formules, etc ... :

Sub DECALER()
Dim C As Byte
With ActiveSheet
    For C = 2 To 30 'De la colonne B a la colonne AD
        .Cells(C, C).Offset(5) = .Cells(6, C) 'Valeur présente dans la cellule de la colonne à la ligne 6 vient se coller à la ligne de la colonne auquel on rajoute 5 (exemple si C = 2, alors la ligne sera 2 + 5 = 7) Donc Cells(7,2) = Cells(6,2) donc B7 = B6 = 0401
    Next C 'Passe à la colonne suivante
End With
End Sub

Si vous souhaitez ne pas convertir les valeurs numériques alors :

Sub DECALER()
Dim C As Byte
With ActiveSheet
    For C = 2 To 30
        .Cells(C, C).Offset(5).NumberFormat = "0000"
        .Cells(C, C).Offset(5) = .Cells(6, C)
    Next C
End With
End Sub

A adapter en fonction de vos besoins.

Cdlt,

Déjà un grand merci pour votre aide. Je pense qu'avec des explications plus claire, vous auriez réglé mon problème depuis bien longtemps. Je vous joint un fichier qui explique plus clairement mon souhait. mon problème est en feuil5. le module concerné est "D4_Ass_Devis_HTS". j'ai placé votre bout de code entre les astérix. Merci d'avance.

Cdlt

5devis-data.zip (149.78 Ko)

Bonjour,

Ci-contre votre code corrigé, à adapter en fonction de vos besoins :

Sub DECALER()
Dim C As Byte, L As Byte, D As Byte
With ActiveSheet
    For L = 7 To 13 'Pour les lignes 7 à 13
        D = 0 'Initie D à 0
        If .Cells(L, 1) <> "" Then 'Si la première cellule de la ligne L n'est pas vide
            For C = 5 To 18 'Pour les colonnes 5 à 18
                If .Cells(L, C) <> "" Then 'Si la cellule de la ligne L, colonne C n'est pas vide
                    .Cells(L, C).Offset(D) = .Cells(L, C) 'On décalle la valeur de D
                    D = D + 1 'On incrémente D
                End If
            Next C 'Prochaine colonne
        End If
    Next L 'Prochaine ligne
End With
End Sub

Cdlt,

Merci Ergotamine, ça fonctionne à merveille !

Rechercher des sujets similaires à "decalage bas chaque vide"