Bug d'affichage avec 2 procédures identiques ?

Bonsoir à tous,

Dans le module "Mod_InsertLigne", j'ai deux procédures identiques qui servent à insérer une ligne avant la ligne "Sous Total" dans mes feuilles "C.MUTUEL" et "ESPECES".

Pour la feuille "C.MUTUEL", ça fonctionne parfaitement...

Par contre pour la feuille "ESPECES", si j'active la commande "Selection.ClearFormats", ça me supprime les bordures des cellules et si je la désactive, ça me reproduit le format de la ligne "Sous Total" sur la nouvelle ligne insérée...

quelqu'un a-t-il une petite idée de ce qu'il se passe ?

Et m'en donner l'explication.

Merci de votre aide...

Mon fichier joint :

Bonsoir atlonia,

tu a écrit :

si j'active la commande "Selection.ClearFormats", ça me supprime les bordures des cellules

c'est normal, car les bordures font partie des formats de cellules !

à la place, met : Selection.ClearContents

(ça efface que les valeurs, pas les formats)

dhany

Bonsoir dhany,

J'ai testé par acquis de conscience, mais je me doutais que ça ne fonctionnerait pas, Puisque c'est bien le format que je veux effacer et pas le contenu du fait que j'insère une nouvelle ligne vierge...

d'ailleurs, "ClearFormats" fonctionne très bien dans 1ère macro qui gère la feuille "C.MUTUEL"...

Merci quand même d'avoir répondu présent.

alors dans ce cas, efface le format adéquat (qui n'est pas les bordures) ; par exemple, s'il y a un format numérique spécial, efface-le en utilisant : .NumberFormat = "General" : ça met le format Standard ; si tu veux enlever une couleur de remplissage, utilise : .Interior.ColorIndex = xlNone ; pour enlever une couleur de texte : .Font.ColorIndex = xlNone

y'en a pas mal, des formats autres que les bordures ! t'as largement le choix !

dhany

Bonjour,

Ne serait-ce pas seulement que dans InserLigne2 que la Sheets("ESPECES") n'était pas sélectionnée ?

Ça donnerait ...

Sub InsertLigne2()

' Insère une Ligne avant la ligne "Sous/Total" de la feuille "ESPECES"
   Dim lig As Long
   lig = Sheets("ESPECES").Range("A1048576").End(xlUp).Row

   Sheets("ESPECES").Select    ' <<< ici...
   Range("A" & lig & ":G" & lig).Select

   Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   Selection.ClearFormats

End Sub

ric

dhany, ça ne marche toujours pas, je pense que le problème vient d'ailleurs, car seule la colonne F n'est pas touchée par le bug, de plus comme je te l'ai dis dans ma réponse précédente, la commande fonctionne bien dans l'autre procédure qui dans le même module...

Merci ric,

J'ai déjà testé cette solution, mais ça n'a pas résolu le problème...

Bonjour,

Et avec ce fichier ... c'est bon ou pas ?

Ou je n'ai pas bien compris ?

ric

ça n'est pas tout à fait ça, toutes les bordures de la ligne sont blanches sauf pour la colonne F...

C'est ce qui me fait penser que le problème est ailleurs...

Je viens de résoudre le problème en recréant les bordures dans la macro:

   With Selection
      .Borders.LineStyle = xlContinuous
      .Borders.ColorIndex = 0
      .Borders.TintAndShade = 0
      .Borders.Weight = xlThin
   End With

Mais je ne trouve pas ça très normal...!

Vu que ça marche dans une macro et pas dans l'autre..

De plus je ne comprend pas pourquoi un seule cellule F de la ligne n'est pas touchée par le problème...

Bonjour,

J'avoue que les lignes blanches, telles mes nuits, ne me sautaient pas aux yeux.

Je regarde la chose d'un autre oeil.

ric

Merci encore de ta présence et de ton aide...

Il est temps pour moi d'aller dormir (1h45)

Bonne soirée...

c'est juste une piste :

Option Explicit

Sub InsertLigne()
' Insère une Ligne avant la ligne "Sous/Total" de la feuille "C.MUTUEL"
  Dim n&
  With Worksheets("C.MUTUEL").ListObjects("Tableau14")
    n = .ListRows.Count: .ListRows.Add n
  End With
End Sub

Sub InsertLigne2()
' Insère une Ligne avant la ligne "Sous/Total" de la feuille "ESPECES"
  Dim n&
  With Worksheets("ESPECES").ListObjects("Tableau2")
    n = .ListRows.Count: .ListRows.Add n
  End With
End Sub

bonne soirée à toi aussi.

dhany

Bonjour,

Un test que j'ai fait ... j'ai supprimé la feuille ESPECES, copié la feuille C.MUTUEL et renommé la copie ESPECES.

Eh! bien, les lignes blanches sont encore là ... étrange ... il va falloir en parler à Mulder et Scully pour avoir leurs avis.

Je ne désespère pas ... un jour ... ou une nuit ...

ric

Bonjour,

Après biens des délibérations avec moi-même à propos du problème de lignes blanches, je propose une autre façon de faire. Insérer une ligne et copier les formats de la ligne 3 sur la nouvelle ligne.

Même la MFC se copie (si elle est bien paramétrée au départ, car il semble y avoir un peu de travail à faire de ce côté-là).

Tout beau ...

En espérant que cela puisse être accrédité ...

Sub InsertLigne()
Dim iLig As Long
   ' Insère une Ligne avant la ligne "Sous/Total" de la feuille "C.MUTUEL"

   iLig = Sheets("C.MUTUEL").Range("A1048576").End(xlUp).Row

   Sheets("C.MUTUEL").Select
   Range("A" & iLig & ":G" & iLig).Select
   Selection.ListObject.ListRows.Add (iLig - 2)
   Range("A3:G3").Copy
   Range("A" & iLig).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                                  SkipBlanks:=False, Transpose:=False
End Sub

Sub InsertLigne2()
Dim lig As Long
   ' Insère une Ligne avant la ligne "Sous/Total" de la feuille "ESPECES"

   lig = Sheets("ESPECES").Range("A1048576").End(xlUp).Row

   Sheets("ESPECES").Select
   Range("A" & lig & ":G" & lig).Select
   Selection.ListObject.ListRows.Add (lig - 2)
   Range("A3:G3").Copy
   Range("A" & lig).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                                 SkipBlanks:=False, Transpose:=False
End Sub

ric

Bonjour dhany et ric,

J'ai testé vos 2 solutions:

dhany, ta solution fonctionne, mais fait étrange, la cellule de la colonne D et la bordure de fin de ligne restent blanches...

toujours ce fantôme qui me hante...

ric, la tienne rempli complètement son rôle, elle et beaucoup plus logique que la solution que j'avais trouvé, je vais donc l'adopter pour ce projet...!

Peux-tu m'expliquer "SkipBlanks:=False" ?

Merci à tout les deux pour les efforts que vous déployez pour m'aider...

Pour l'heure, je dois m'absenter pour le reste de la journée...

Bonjour,

Paste : It is Optional argument. Paste specifies the part of the range to be pasted. Please find the ‘xlPasteType’ table at the bottom of the page for more information.

Operation : It is Optional argument. Operation specifies the how numeric data will be changed at the destination cells in the worksheet. Please find the ‘XlPasteSpecialOperation’ table at the bottom of the page for more information.

SkipBlanks : It is Optional argument. SkipBlanks contains boolean value either True or False. The default value is False. If SkipBlanks is True, It won’t copy the blank cells from the clipboard(Which we copied to dp pastespecial) to the destination range.

Transpose : It is Optional argument. Transpose contains boolean value either True or False. The default value is False. If Transpose is True, It will transpose the rows and columns when the range pasted.

Source : https://analysistabs.com/vba-code/range/m/pastespecial/

ric

Bonjour,

l'aide VBA en français est pas mal, elle aussi (à un p'tit détail près, d'où c'qui est noté en rouge) :

screen

Source : aide VBA Microsoft, déjà incluse dans Excel (pas sur le net)

dhany

Bonjour dhany,

Pardon pour le retard à te répondre, mais j'avais l'esprit loin de mon ordi ces temps ci...!

Merci pour l'explication, il est vrai que je ne pense pas toujours à consulter l'aide d'excel...

A+

Bonjour à tous !

Remarque en passant : dommage d'utiliser un tableau Excel et travailler sur ce tableau comme s'il s'agissait d'une plage normale...

Cordialement.

Rechercher des sujets similaires à "bug affichage procedures identiques"