Macro permettant de décaler une cellule liée à la cellule d'en dessous

RomaneK

XLDnaute Nouveau
Bonjour,

Je suis débutante en macro. Voici mon problème: J'ai créée une macro me permettant de rajouter une ligne à l'endroit sélectionné en recopiant la cellule du dessus et en effaçant les données de cette dernière (rajout fait dans deux feuilles, 1:mes données, 2:ma gestion de cellules liées). Cependant, les lignes de dessus (dans la feuille de données) comportent des cases à cocher et lors de l'ajout de ligne, la case est copié en dessous mais la cellule liée reste la même que celle du dessus. J'aimerais donc rajouter à la fin de mon code, quelque chose qui me permettrait de décaler la cellule liée en dessous de celle copiée. J'espère être assez claire, j'ai fait le tour des forums et pas de solutions trouvées. Voici le code d'ajout de ligne:

VB:
Sub Ajout_ligne()

Application.ScreenUpdating = False
' Ajout d'une ligne dans la feuille Choix matériaux et Gestions_macros
    Sheets("Choix matériaux").Select
        'faire une nouvelle ligne
        ActiveCell.EntireRow.Insert Shift:=xlDown
        'copier la ligne du dessus
        ActiveCell.Offset(-1, 0).EntireRow.Copy Cells(ActiveCell.Row, 1)
        On Error Resume Next
        'effacer le contenu de la nouvelle ligne mais garder la forme
        ActiveCell.EntireRow.ClearContents
    Sheets("Gestion_macros").Select
        'faire une nouvelle ligne
        ActiveCell.EntireRow.Insert Shift:=xlDown
        'copier la ligne du dessus
        ActiveCell.Offset(-1, 0).EntireRow.Copy Cells(ActiveCell.Row, 1)
        On Error Resume Next
        'effacer le contenu de la nouvelle ligne mais garder la forme
        ActiveCell.EntireRow.ClearContents
    Sheets("Choix matériaux").Activate
      
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Romanek et bienvenue sur XLD :)

Pour chaque feuilles, il faut lui dire que cellule il doit sélectionner. Un exemple à adapter

VB:
Option Explicit
Public cel As Range        'À mettre en dessus de Sub Ajout_ligne()

With  Sheets("Choix matériaux")
set cel = .Cells(3, "A")
End with

With cel
.EntireRow.Insert Shift:=xlDown
cel.Offset(-1, 0).EntireRow.Copy   Sheets("Choix matériaux").Cells(cel.Row, 1)
End With

With  Sheets("Gestion_macros")
set cel = .Cells(2, "A")
End with

With cel
.EntireRow.Insert Shift:=xlDown
.Offset(-1, 0).EntireRow.Copy   Sheets("Gestion_macros").Cells(.Row, 1)
End With
 

RomaneK

XLDnaute Nouveau
"Pour chaque feuilles, il faut lui dire que cellule il doit sélectionner." C'est à dire la cellule sélectionnée au tout début avant l'ajout de ligne, ce que j'appelais "ActiveCell" ?
Ce code doit-il remplacer ou compléter le miens ?
Désolé je ne comprends pas comment ce code fonctionne surtout la partie "set cel = .Cells(3, "A")" (est ce que ça sélectionne la cellule A3 ?) et "Sheets("Choix matériaux").Cells(cel.Row, 1)"
Désolé je n'ai encore pas utilisé les fonctions cells, set...
Merci pour votre réponse
 

pierrejean

XLDnaute Barbatruc
Bonjour RomaneK
A tester
NB: cette même macro conviendra quelle que soit la page ou un bouton en fera référence (sous réserve qu'il y ait aussi une checkBox ajoutée )
 

Pièces jointes

  • Bons de chargement et de livraison (b).xlsm
    210.4 KB · Affichages: 36

Discussions similaires

Réponses
2
Affichages
544

Statistiques des forums

Discussions
312 027
Messages
2 084 762
Membres
102 655
dernier inscrit
STA82700