XL 2016 procédure qui ne fait rien

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 ?
 
Solution
ok
ajoute une mfc
la formule
=ET(NB.SI($B3:$H3;"*")>0;ET($B3<>"";OU($L3&$B3="";$M3<ANNEE(AUJOURDHUI()))))

et ca s'applique à
=$B$3:$B$1000;$L$3:$M$1000
démo résultat
demo4.gif

MFoxy

XLDnaute Nouveau
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
 

MFoxy

XLDnaute Nouveau
Re,

Quelques explications sur les tableaux structurés / listObject sur le site MS.


Bav,
 

Bill73

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

Dranreb

XLDnaute Barbatruc
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:

Bill73

XLDnaute Junior
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
 

patricktoulon

XLDnaute Barbatruc
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
 

Bill73

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

patricktoulon

XLDnaute Barbatruc
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)
 

Discussions similaires

Réponses
8
Affichages
654
Réponses
1
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87