Insertion de lignes dans un tableau

Bonjour à tous,

Alors voilà, je suis nouveau ici, et même si j'ai quelques bases en VBA, je m'y connais pas très bien ^^'

Pour un projet, j'ai besoin de faire un certain code, mais pas moyen de réussir, et j'ai eu beau chercher plusieurs jours, je n'ai pas encore trouvé ma perle rare !

Ce que j'ai besoin, c'est une macro qui me permettrait de couper des lignes d'un tableau d'une feuille et de les insérées dans un tableau d'une autre feuille.

Dans mon cas, de l'attente montage à Historique de montage, les interventions mise en état "fait" seront envoyé, en appuyant sur un bouton, vers la deuxième feuille.

Ma solution (version beta 0) était d'insérer une ligne et de modifier la fonction obtenu avec l'enregistreur de macro.

Ayant un tableau croisé dynamique me donnant le nombre de ligne de tâche classer "fait", je voulais utiliser la valeur contenue dans cette cellule dans mon programme afin d'adapter en permanence le nombre de ligne à ajouter en actualisant le tableau au passage.

Cependant, je ne sais pas comment faire, car j'ai essayé plusieurs chose :

  • mettre la valeur de la cellule dans une variable "n" puis faire "Selection.ListObject.ListRows.Add (n)"
  • ou directement Selection.ListObject.ListRows.Add (Range("O3")) (O3 étant la fameuse cellule)

Je joint une copie de mon excel, mais il ne s'agit malheureusement pas de la dernière version, je m'excuse donc, mais cela pourra toujours vous aider.

Merci à ceux qui voudront bien me sauver !

Salut,

Tes feuilles sont protégées par mots de passe, j'en ai alors fait des copies libres.

Dans le fichier ci-joint, les lignes indiquées comme faite sur la feuille ''Liste attente montage'' sont transférées sur l'autre feuille lorsque tu cliques sur le bouton en place.

Vu les références utilisées, il est possible de les placer au bon endroit sur la feuille ''Historique des montages''. Mais d'autres solutions sont envisageables.

C'est un début de solution ?

Si non, indique ce qui est en trop, ce qui manque à ma solution et fourni un fichier sans mot de passe ou indique les mots de passe mis en place.

Amicalement.

11essai-19-12.xlsm (40.83 Ko)

Salut ^^

Merci beaucoup de ton aide Yvouille, j'ai testé, et cela fait exactement l'effet escompter. JE te remercie énormément ! (Le mot de passe était écrit au dessus du premier tableau, j'ai donc envoyé le mauvais fichier, je m'en excuse !)

j'ai en parallèle aussi trouvé une solution fonctionnelle que je vais poster pour les curieux. Après tout ça peut toujours être utile et aucun soucis pour avoir des critique sur ce que j'ai fait pour m'améliorer !

Mais si tu pouvais juste m'aider adapter le tien à l'emplacement de mes tableaux (j'ai un peu du mal et je les envoies pas au bon endroit ou cela me détruit de mauvaise ligne ><)

Sub depla_histo()
'
' depla_histo Macro
'

'position initial et définition de variable
    Sheets("Liste attente montage").Select
    Dim n As Integer
    n = Range("AK1").Value

    'protection off et actualisation du nombre de fait
    ActiveSheet.Unprotect "toto"
    ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh

'Condition d'execution
    If n <> 0 Then
        i = 0
        'Boucle de création de ligne selon le nombr de "fait"
        While i <> n
            Sheets("Historique des montages").Select
            ActiveSheet.Unprotect "toto"
            Range("B7").Select
            Selection.ListObject.ListRows.Add (1)
            i = i + 1
        Wend
'séquence de déplacement
        Sheets("Liste attente montage").Select
        ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8, Criteria1:= _
            "fait"

        On Error Resume Next
        Range("Liste[[Référence]:[Date de livraison]]").Select
        Selection.Copy
        Sheets("Historique des montages").Select
        Range("B7").Select
        ActiveSheet.Paste
        Sheets("Liste attente montage").Select
        Selection.EntireRow.Delete
        ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8

    End If
'actualisation
    ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh

End Sub

Enfin bref, tout mes gros problèmes sont résolus, plus que des petits détails à régler, surtout niveau esthétique (bouton qui ouvre un fichier excel en raccourcie au lieu de liens hypertexte) mais rien d'important vraiment. Je joint aussi mon fichier, si cela permet de voir le fonctionnement ^^

Cordialement.

Salut ^^

Merci beaucoup de ton aide Yvouille, j'ai testé, et cela fait exactement l'effet escompter. JE te remercie énormément ! (Le mot de passe était écrit au dessus du premier tableau, j'ai donc envoyé le mauvais fichier, je m'en excuse !)

j'ai en parallèle aussi trouvé une solution fonctionnelle que je vais poster pour les curieux. Après tout ça peut toujours être utile et aucun soucis pour avoir des critique sur ce que j'ai fait pour m'améliorer !

Mais si tu pouvais juste m'aider adapter le tien à l'emplacement de mes tableaux (j'ai un peu du mal et je les envoies pas au bon endroit ou cela me détruit de mauvaise ligne ><)

Sub depla_histo()
'
' depla_histo Macro
'

'position initial et définition de variable
    Sheets("Liste attente montage").Select
    Dim n As Integer
    n = Range("AK1").Value

    'protection off et actualisation du nombre de fait
    ActiveSheet.Unprotect "toto"
    ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh

'Condition d'execution
    If n <> 0 Then
        i = 0
        'Boucle de création de ligne selon le nombr de "fait"
        While i <> n
            Sheets("Historique des montages").Select
            ActiveSheet.Unprotect "toto"
            Range("B7").Select
            Selection.ListObject.ListRows.Add (1)
            i = i + 1
        Wend
'séquence de déplacement
        Sheets("Liste attente montage").Select
        ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8, Criteria1:= _
            "fait"

        On Error Resume Next
        Range("Liste[[Référence]:[Date de livraison]]").Select
        Selection.Copy
        Sheets("Historique des montages").Select
        Range("B7").Select
        ActiveSheet.Paste
        Sheets("Liste attente montage").Select
        Selection.EntireRow.Delete
        ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8

    End If
'actualisation
    ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh

End Sub

Enfin bref, tout mes gros problèmes sont résolus, plus que des petits détails à régler, surtout niveau esthétique (bouton qui ouvre un fichier excel en raccourcie au lieu de liens hypertexte) mais rien d'important vraiment. Je joint aussi mon fichier, si cela permet de voir le fonctionnement ^^

Cordialement.

Edit: C'est bon j'ai réussi à l'adapter, je n'avais pas vu la ligne Range("B4"). J'ai donc transformer une partie en

 
 Range("B7").Activate
            If ActiveCell > .Range("B" & i) Then ' Il n'y a pas de référence précédente
                Rows("7:7").Insert Shift:=xlDown
                .Range("B" & i & ":H" & i).Copy Range("B" & ActiveCell.Row)
                .Rows(i).Delete Shift:=xlUp

original :

Range("B4").Activate
            If ActiveCell > .Range("B" & i) Then ' Il n'y a pas de référence précédente
                Rows("4:4").Insert Shift:=xlDown
                .Range("B" & i & ":H" & i).Copy Range("B" & ActiveCell.Row)
                .Rows(i).Delete Shift:=xlUp

Merci énormément de ton aide !

Tant mieux si c'est liquidé

Chaleureusement.

Rechercher des sujets similaires à "insertion lignes tableau"