Macro permettant de copier cellule

Bonjour,

J'ai un fichier qui est composé de valeurs dans la colonne A (A, B, C, D, total général). Entre chaque valeur, les cellules sont vides.

Je cherche à ce que ces cellules vides prennent la valeur de la dernière cellule non-vide au dessus jusqu’à la cellule "total général"

Je souhaiterai également que cette macro se déclenche automatiquement.

fichier joint

Quelqu'un aurait-une idée svp?

Merci d'avance

16exemple.xlsx (8.49 Ko)

Bonjour,

Pour renseigner ta colonne, tu peux utiliser une macro de ce type :

Sub Test()
Dim DerLig As Long, Ligne As Long
    With Worksheets("Feuil1")
        DerLig = .Range("A" & Rows.Count).End(xlUp).Row - 1
        For Ligne = 1 To DerLig
            If .Range("A" & Ligne) = "" Then
                .Range("A" & Ligne) = .Range("A" & Ligne).Offset(-1)
            End If
        Next Ligne
    End With
End Sub

Par contre, pour que la procédure se déclenche automatiquement, il faut tout d'abord que tu définisses quel sera l'élément déclencheur (modification ou sélection d'une cellule, ouverture du classeur, bouton de commande, etc.)

A+

Bonjour,

Merci pour ce code.

Je souhaiterai qu'elle se déclenche lorsque je colle les éléments dans l'onglet. (J'ai en effet la liste de client dans un autre fichier je copie/colle dans le nouveau fichier).

Je souhaiterai que la macro ne se déclenche qu'a ce moment la.


Bonjour,

Autre question liées, si jamais je veux que ce code s'effectue sur plusieurs onglets mais pas en même temps?

Par exemple (ci-joint le fichier), si je souhaite que quand je colle les éléments de Janvier, cela soit fait seulement sur janvier et idem pour fevrier?

11exemple.xlsx (8.84 Ko)

Il va falloir que tu sois un peu plus précis.

Qu'est-ce que tu colles ? A quel endroit ?

D'après tes explications et ton exemple précédents, les seuls éléments variables sont contenus par les cellules A1, A9, A18, A27, etc.

A+

frangy a écrit :

Qu'est-ce que tu colles ? A quel endroit ?

sur un autre fichier à part, j'ai exactement la même liste. Je fais un Ctrl+C / Ctrl + V de cette liste dans l'onglet "feuille 1". De même j'ai un autre fichier où je fais la même chose dans l'onglet 2 (Ctrl C + Ctrl V).

Je souhaiterai que ce soit au moment ou je colle les données dans l'onglet que la macro se déclenche.

frangy a écrit :

D'après tes explications et ton exemple précédents, les seuls éléments variables sont contenus par les cellules A1, A9, A18, A27,

Les cellules sont aléatoires et n'ont pas de logique entre elle. Elle commence juste en A1 et finisse avec "total général"

Voici un exemple avec utilisation de l'évènement Workbook.SheetChange du classeur.

Lorsqu'une modification est détectée dans la colonne A d'une feuille, la procédure est lancée automatiquement.

A+

13exemple.xlsm (13.75 Ko)

Ca m'a l'air top ! Rapide en plus !

Par contre, si je rajoute un nouvel onglet et que je veux pas que la macro s'active sur celle-ci, comment puis-je faire?

La première possibilité est d'ajouter une ligne de code de ce type

if Ws.name<>"<Nom_de_la _feuille>" then

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim DerLig As Long, Ligne As Long
    If Sh.Name <> "Feuil3" Then
        If Target.Column = 1 Then
            With Sh
                DerLig = .Range("A" & Rows.Count).End(xlUp).Row - 1
                For Ligne = 1 To DerLig
                    If .Range("A" & Ligne) = "" Then
                        .Range("A" & Ligne) = .Range("A" & Ligne).Offset(-1)
                    End If
                Next Ligne
            End With
        End If
    End If
End Sub

Cette méthode convient bien si le nombre de feuille à exclure n'est pas important.

La deuxième possibilité est de placer le code uniquement dans le module des feuilles concernées par le traitement

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DerLig As Long, Ligne As Long
    If Target.Column = 1 Then
        DerLig = Range("A" & Rows.Count).End(xlUp).Row - 1
        For Ligne = 1 To DerLig
            If Range("A" & Ligne) = "" Then
                Range("A" & Ligne) = Range("A" & Ligne).Offset(-1)
            End If
        Next Ligne
    End If
End Sub

Cette méthode convient bien si le nombre de feuilles à traiter n'est pas important.

Remarque bien que l'évènement utilisé est Worksheet.Change (et non plus Workbook.SheetChange).

A+

Rechercher des sujets similaires à "macro permettant copier"