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.

133249 68f3b8fddcd29985245831

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
133249 68f491b2da427128248936 133249 68f4916831259555776911

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....

image

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.

image image

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'objet ListRow exemple c.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 :

image

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.

image

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

Rechercher des sujets similaires à "bordures qui tiennent pas nouvelles creations lignes"