XL 2010 VBA pour ajouter une ligne

Matt87

XLDnaute Nouveau
Bonjour à tous,

J'ai un petit souci avec un fichier excel. J'ai un tableau dans lequel j'aimerais pouvoir ajouter une ligne à la toute fin de celui-ci avec un simple clic. La ligne doit contenir une case à cocher(contrôle de formulaire) et ce dernier doit être lié à une cellule question de pouvoir comptabiliser le tout en bas de colonne. Est-ce que quequ'un est en mesure de m'éclairer? Vous trouerez en pièce jointe une copie du tableau en question. Merci à l'avance !
 

Pièces jointes

  • Journal mensuel entreprises.xlsx
    34.2 KB · Affichages: 60

Matt87

XLDnaute Nouveau
Bonjour Staple1600,

Merci pour la réponse rapide. En testant ta macro, je m'aperçois qu'elle ajoute belle et bien la ligne ainsi que les contrôles de formulaire désirés. Un seul petit problème se présente. Lorsque je désire cliquer sur le contrôle de formulaire ajouté, je me retrouve avec deux contrôles de formulaire cliqués soit le dernier et l'avant dernier et ainsi de suite si j'ajoute une autre ligne, je me retrouve avec 3 cases de cochés. Probablement dû au fait que les cellules liée sont également copier et non appliqué à la nouvelle cellule ajouté! Est-ce qu'il y a une solution? Encore une fois merci à l'avance.
 

Staple1600

XLDnaute Barbatruc
Re

On avance, mais pas sur que ce soit vraiment mieux
VB:
Sub b()
Dim sh As Shape
Application.ScreenUpdating = False
Dim DerLig As Long, DerLigne As Long
DerLig = Cells(Rows.Count, 1).End(xlUp).Row
Rows(DerLig - 1).Copy
Rows(DerLig - 1).Insert Shift:=xlDown
DerLigne = Cells(Rows.Count, 1).End(xlUp).Row - 1
For Each sh In ActiveSheet.Shapes
If sh.TopLeftCell.Row = DerLigne Then
sh.Select
Selection.LinkedCell = sh.TopLeftCell.Address
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

J'ai toujours le même problème!
Le ! est de trop, non ?
J'essaie de t'aider, alors un peu de patience, camarade :rolleyes:

Une autre version qui évite la Selection, mais qui préserve le problème
VB:
Sub c()
Dim DerLig As Long, chk As CheckBox
Application.ScreenUpdating = False
DerLig = Cells(Rows.Count, 1).End(xlUp).Row
Rows(DerLig - 1).Copy: Rows(DerLig - 1).Insert Shift:=xlDown
DerLigne = Cells(Rows.Count, 1).End(xlUp).Row - 1
For Each chk In ActiveSheet.CheckBoxes
With chk
.LinkedCell = .TopLeftCell.Address
End With
Next
End Sub
NB:Si à la place, la case à cocher, on mettait un X, cela annihilerait le problème case à cocher ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Alors une solution qui n'est pas des plus fine mais qui semble fonctionner
VB:
Sub d()
Application.ScreenUpdating = False
With Rows(Cells(Rows.Count, 1).End(xlUp).Row - 1)
.Copy: .Insert Shift:=xlDown
End With
Call RAZ: Call LINKCELLS
End Sub
Sub RAZ()
Dim chk As CheckBox
For Each chk In ActiveSheet.CheckBoxes
With chk
.LinkedCell = ""
End With
Next
End Sub
Sub LINKCELLS()
Dim chk As CheckBox
For Each chk In ActiveSheet.CheckBoxes
With chk
.LinkedCell = .TopLeftCell.Address
End With
Next
End Sub
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Bonjour Matt87

Salut staple

A tester:

Code:
Sub a()
Application.ScreenUpdating = False
Dim DerLig As Long
DerLig = Cells(Rows.Count, 1).End(xlUp).Row
Rows(DerLig - 1).Copy
Rows(DerLig - 1).Insert Shift:=xlDown
For n = 1 To ActiveSheet.Shapes.Count
   If InStr(ActiveSheet.Shapes(n).Name, "Check Box") <> 0 Then
   ActiveSheet.Shapes(n).Select
    Selection.LinkedCell = ActiveSheet.Shapes(n).TopLeftCell.Address
   End If
Next
Range("A1").Select
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Réponses
4
Affichages
277
Réponses
4
Affichages
327

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo