Bordures qui ne tiennent pas sur de nouvelles créations de lignes
Bonjour,
J'essaye d'avoir des bordures automatiques sur mon tableau (et les valeurs de base "0") lorsque j'ajoute des nouvelles données.
Moins grave, j'ai aussi la colonne Y qui ne s'harmonise pas correctement.
3 solutions ont été testées ==>
1) Par du VBA.
Sur les bordures dans les 2 modules ==> Feuil2 (5 ateliers) + Module7.
Sur la colonne Y ==> Module14.
2) En préformartant 200 lignes mais lorsque je créé de nouvelles lignes les bordures ne tiennent pas.
3) En utilisant une nouvelle procédure dans le Module7 ==> Sub Quadrillage_5_ateliers()
Mais là aussi j'ai une erreur, cette fonction personnalisée ne déclenche pas car erreur sur "Weight"
Sub Quadrillage_5_ateliers()
With Range("TBL_5Ateliers").ListObject.Range
.Borders.Weight = xlThin 'quadrillage fin pour toutes les lignes et colonnes
.Resize(, 3).BorderAround Weight:=xlMedium 'bordure droite la colonne C
.Resize(, 7).BorderAround Weight:=xlMedium 'bordure droite la colonne G
.Resize(, 11).BorderAround Weight:=xlMedium 'bordure droite de la colonne K
.Resize(, 15).BorderAround Weight:=xlMedium 'bordure droite de la colonne O
.Resize(, 19).BorderAround Weight:=xlMedium 'bordure droite de la colonne S
.Resize(, 23).BorderAround Weight:=xlMedium 'bordure droite de la colonne W
End With
End Sub
D'après vous, laquelle des 3 solutions peut faire tenir les bordures (et les valeurs de base "0") et que faudrait-il faire pour résoudre ce pb ?
En tout cas, merci beaucoup de vous être intéressé à ce sujet.
Sur le bouton "Débloquer ou Quitter", tapez vodoraix pour tt débloquer.
Et mot de passe pour débloquer les feuilles ==> seb
Bonne journée
à bientôt.
Bonjour à tous,
Il est inutile de passer par une macro pour cela, votre tableau est mal structuré, effacer l'ensemble de la mise en forme , et recréer la correctement, (il faut que toutes les lignes aient le même format ce qui n'est pas le cas sur l'image)
Ceci fait à l'ajout d'une ligne le format sera répercuté sur la nouvelle ligne.
Bonjour Jean-Paul et merci beaucoup pour ton intervention...
Pour être certain, j'ai fait une RAZ de mon tableau mais....
L'enregistrement de la première ligne se fait parfaitement mais quand je veux en créer un 2ème, un message d'erreur apparaît. Or il y a bien un unprotect de la feuille et i n'est pas égal à 999.
Re,
Petits retours sur le code :
- Passer Cancel sur True pour éviter de passer en mode édition après l'exécution du code.
- Puisque vous utilisez des TS profitez de leurs propriétés et méthodes exemple
Add. - Vous déclarez plusieurs variables,
DerLig_f2,x,Nom,prenom. Mais vous ne les utilisez pas. (il faut les supprimer.) - Quand vous passer la gestion des évènement sur
False, vous devez faire une gestion d'erreur sinon vous courrez aux problèmes. - Éviter ce genre de code inutile ici
Application.Goto c - Éviter ce genre de code :
- Préférez-y un bouton ou autre. ce sera plus intuitif.
- Au lieux de travailler avec l'objet
Range, travaillez avec l'objetListRowexemplec.Resize(, 23).Value = 0
A la vue de ces diverses remarques le code pourrait être de la sorte :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo Catch
Cancel = True ' // On evite de passer en mode édition après l'éxécution du code
Dim Ateliers As Excel.ListObject
Set Ateliers = Me.Range("TBL_5Ateliers").ListObject
If Not Ateliers Is Nothing Then ' // Le tableau exist-il bien ?
Application.EnableEvents = False
'TODO "Utiliser une constante pour ce mot de passe."
Me.Unprotect Password:=GlobalConstants.SHEETS_MDP
'TODO "Utiliser une autre méthode pour sélectionner un nom. par exemple une zone de liste déroulante."
If Not Intersect(Target, Me.Range("tabel8[noms]")) Is Nothing Then
Dim arr As Variant
'TODO "Le formatage doit-être fait avant. (A l'insertion d'un nouveau nom par exemple.)
arr = Array(UCase(Target.Value), Application.Proper(Target.Offset(0, 1).Value), UCase(Target.Offset(0, 2).Value))
Dim newRow As Excel.ListRow
If GlobalConstants.POSITION_TO_ADD_ON_TAB > 0 Then
Set newRow = Ateliers.ListRows.Add(Position:=GlobalConstants.POSITION_TO_ADD_ON_TAB) ' // Par défaut on ajoute à la fin du tableau. modification dans le module GlobalConstants.
Else
Set newRow = Ateliers.ListRows.Add ' // Par défaut on ajoute à la fin du tableau. modification dans le module GlobalConstants.
End If
With newRow
.Range.Range("A1:C1").Value = arr
.Range.Range("D1:W1").Value = 0
End With
End If
Me.Protect Password:=GlobalConstants.SHEETS_MDP
End If
Finally:
Application.EnableEvents = True
Exit Sub
Catch:
' // Do something.
MsgBox "Oupss... Nous avons rencontré une erreur : " & Err.Number & _
" (" & Err.Description & ") dans la procédure tempSub du Document VBA Feuil2"
Resume Finally
End Sub
Merci beaucoup Jean-Paul
Super pour tes explications et merci pour le temps que tu as pris pour moi.
J'ai essayé de comprendre ligne par ligne mais j'avoue que je suis facilement dépassé... C'est BsAlv, Arturo83 & Galopin01 qui m'ont composé tout le code.
Lorsque je double-clique sous la dernière ligne du tableau des données "TBL_5Ateliers", BsAlv m'avait fait en sorte que je puisse rajouter un nom qui n'appartiendrait pas au tableau "Tabel8". Et je suppose que les variables DerLig_f2, Nom & prenom sont nécessaires ainsi que quelques lignes de code en VBA car cette fonction ne marche plus.
Encore merci pour ta précieuse aide
Re,
Oupss... J'ai modifier mon message et enlever une partie.
Quand vous dites :
Lorsque je double-clique sous la dernière ligne du tableau des données "TBL_5Ateliers", BsAlv m'avait fait en sorte que je puisse rajouter un nom qui n'appartiendrait pas au tableau "Tabel8"
J'ai bien compris et j'aurais du répondre, que l'ajout d'une ligne sur l'un ou l'autre du tableau devrait se faire via un bouton ou autre ce qui est beaucoup plus intuitif.
J'ai essayé de comprendre ligne par ligne mais j'avoue que je suis facilement dépassé...
Quelles sont les parties du code qui ne sont pas comprise ?
En réalité, j'essaye de comprendre le sens général d'une macro mais je suis nul en programmation, voilà pourquoi on m'a composé tout le code.
Sinon, je crois bien que c'est cette partie là qu'il manque pour rajouter un nouveau nom :
Mais ta solution de créer un bouton pour rajouter une ligne uniquement sur le tableau ""TBL_5Ateliers", je préfère
Je ne saurai pas le faire moi-même...
Tu penses que c'est mieux que j'ouvre un nouveau sujet ?
Merci
à+
J'ai essayé de recopier un bouton "Insérer ligne" d'une autre feuille.
Problème : le code VBA ci-dessous permet d'insérer n'importe où dans le tableau mais je ne veux pas car ça m'a engendré des erreurs dans mes MFC et sur les valeurs de cellules.
Sauriez-vous modifier ce code pour que l'insertion se fasse automatiquement sur la dernière ligne (dans l'exemple, ligne 12) ==>
Sub Inserer_Ligne_5ateliers()
Dim LO As ListObject
On Error Resume Next
Set LO = ActiveCell.ListObject
On Error GoTo 0
If LO Is Nothing Then
MsgBox "Vous n'étes pas dans le tableau" & vbLf & "Impossible de savoir quelle ligne", vbInformation, "Insérer ligne"
Else
i = Application.Max(2, ActiveCell.Row - LO.Range.Row)
With LO
.Parent.Unprotect MdP
.Range.AutoFilter 1
.Range.AutoFilter
LO.ListRows.Add i 'remplacé 2 par i *******************
Application.Goto .DataBodyRange.Cells(1, 1), 1
Application.Goto .DataBodyRange.Cells(i, 1) 'remplacé 2 par i *******************
Proteger
End With
End If
End Sub
Sur le bouton "Débloquer ou Quitter", tapez vodoraix pour tt débloquer.
Et mot de passe pour débloquer les feuilles ==> seb
MErci beaucoup
Bonne soirée