Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 procédure qui ne fait rien

  • Initiateur de la discussion Initiateur de la discussion Bill73
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bill73

XLDnaute Junior
bonjour,

je me casse les dents depuis quelques heures avec :

VB:
Public Sub Format_Ligne(feuille As String, ByVal lig As Integer, dbcol As Integer, fncol As Integer)
        
        Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Borders.LineStyle = 1
        Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Borders.Weight = xlMedium
        Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Borders.Color = RGB(230, 230, 230)
        Worksheets(feuille).Cells(lig, fncol).Borders(xlEdgeRight).Color = RGB(89, 89, 89)
        Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Borders(xlEdgeTop).Color = RGB(230, 230, 230)
        Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Borders(xlEdgeBottom).Color = RGB(89, 89, 89)
        If lig Mod 2 = 0 Then
            Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Interior.Color = RGB(232, 232, 232)
        Else
            Worksheets(feuille).Range(dbcol & lig & ":" & fncol & lig).Interior.Color = RGB(209, 209, 209)
        End If
End Sub

je voudrais avoir ce code en général avec appel type " Format_Ligne "Entrée", ligent, 2, 15 " , ligent étant une variable contenant un numéro de ligne, depuis plusieures feuilles.

si je mets ce code à chaque fois dans les différentes feuilles, ça marche, si je fais une procédure globale, rien ne se passe.

Si quelqu'un a une idée ?
 
Bonsoir,

Utilisant une version 2016 d'excel, ne serait-il pas plus efficace d'utiliser un tableau structuré plutôt qu'une plage classique.

Vous pourriez même, si les visuelles de bases ne vous conviennent pas, créé votre propre format visu.

Bav
 
j'avance :
-le code marche pour la feuille activée
-le code ne marche pas pour une feuille non activée

je m'explique, lorsque je rentre une ligne de données depuis un form, cette ligne se rajoute à un tableau dans une feuille non activée, puis et copiée dans la feuille active.
 
Bonsoir.
VB:
Worksheets(feuille).Range(Cells(lig, dbcol), Cells(lig, fncol)).Borders.LineStyle = 1
mais "erreur d'exe 1004 : Erreur définie par l'application ou l'objet"
Normal: vous ne pouvez pas définir une plage d'une feuille composée de cellules d'une autre feuille, à savoir celles de la feuille active assumée puisque non précisée.
Worksheets(feuille).Range(ActiveSheet.Cells(lig, dbcol), ActiveSheet.Cells(lig, fncol))
Le paramètrage de votre Sub n'est pas pertinent. Je ferais :
Public Sub Format_Ligne(ByVal Cel As Range, ByVal NbCol As Long)
Ce serait bien plus pratique à utiliser.
Et tout tiendrait dans un :
With Cel.Resize(, NbCol)
> .Borders( … etc.
> .Interior.Color = etc.
> End With
Mais c'est vrai aussi que je ne m'embêterais pas à reconduire un format alors que ça se fait tout seul si c'est un tableau Excel
 
Dernière édition:
Normal: vous ne pouvez pas définir une plage d'une feuille composée de cellules d'une autre feuille, à savoir celles de la feuille active assumée puisque non précisée.

surprenant, j'ai tout une série de fonctions ou procédures montées sur le même type d'appel et qui marchent sans problèmes.
- fonctions de tri, recherches, écritures... sur des feuilles autres que l'active
 
bonjour
non ce qui est surprenant c'est que tu dise que d'autre macro montées de la même façon fonctionnent sur des feuilles non activées
Worksheets(feuille).Range(parent.Cells(lig, dbcol),parent. Cells(lig, fncol)).Borders.LineStyle = 1

une écriture simple comme te l'a dit Dranreb que je salut
with Worksheets(feuille):.Range(.Cells(lig, dbcol), .Cells(lig, fncol)).Borders.LineStyle = 1:end with
 
comme quoi, une nuit de sommeil arrange tout :

VB:
Public Sub Format_Ligne(feuille As String, ByVal lig As Integer, dbcol As Integer, fncol As Integer)
    Dim ligne, fligne As Range
    
    With Worksheets(feuille)
        Set ligne = .Range(.Cells(lig, dbcol), .Cells(lig, fncol))
        Set fligne = .Cells(lig, fncol)
    End With
    ligne.Borders.LineStyle = 1
    ligne.Borders.Weight = xlMedium
    ligne.Borders.Color = RGB(230, 230, 230)
    fligne.Borders(xlEdgeRight).Color = RGB(89, 89, 89)
    ligne.Borders(xlEdgeTop).Color = RGB(230, 230, 230)
    ligne.Borders(xlEdgeBottom).Color = RGB(89, 89, 89)
    If lig Mod 2 = 0 Then
        ligne.Interior.Color = RGB(232, 232, 232)
    Else
        ligne.Interior.Color = RGB(209, 209, 209)
    End If
End Sub

la, ça marche que se soit dans la feuille active ou une autre feuille.
 
re
bonjour
ouais ben..il te manque encore quelques heures de sommeil 😉
ligne.Borders.LineStyle = 1
ligne.Borders.Weight = xlMedium
ligne.Borders.Color = RGB(230, 230, 230)
fligne.Borders(xlEdgeRight).Color = RGB(89, 89, 89)
ligne.Borders(xlEdgeTop).Color = RGB(230, 230, 230)
ligne.Borders(xlEdgeBottom).Color = RGB(89, 89, 89)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
1 K
Réponses
0
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…