vba bug sur macro "back-up" (mise en forme caractère spécial)

Laliepomm

XLDnaute Nouveau
Bonjour à tous,

Il y a quelques mois, on m'a fourni une super macro pour la mise en forme du caractère * dans mon tableau.
Aujourd'hui, je finalise enfin ce document, et malheureusement cette macro "back-up" bug lors de la mise à jour (clic sur bouton "Validation des données").

Le truc, c'est que la macro fonctionne tout de même sur une partie du tableau...mais en se bloquant, ne modifie pas l'intégralité du tableau "TableauCompétence"
Du coup, je ne comprends pas où se situe le problème et surtout comment le résoudre.

Message reçu
"Erreur d'exécution '13':
Incompatibilité de type"

ci-dessous la macro qui me pose problème (présente dans le module "aMiseaJour" à la fin de la macro "allinone"):

VB:
'2/transformer les * en étoile orange = pour le back-up (macro nok)
Sheets("Compétences").Select
Dim c As Range, n%
Application.ScreenUpdating = False
For Each c In [TableauCompétence]
    n = InStr(c, "*")
    If n Then
        With c.Characters(n, 1).Font
            .Bold = True
            .ColorIndex = 46
            .Size = 25
            .Name = "Bernard MT condensed"
        End With
    End If
Next[
/CODE]

D'avance merci pour votre support pour résoudre ce bug,

Salutations

Lalie
 

Pièces jointes

  • Tableau de compétence et polyvalence - 30 11 2020.xlsm
    253.5 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour LaliePomme, Eriiic
Dans TableauCompétences vous avez des #Valeur, c'est sur ça que coince le VBA sur n = InStr(c, "*") car c=Erreur2015.
J'ai rajouté un test de non erreur sur c.
Par contre je ne sais pas ce que vous voulez faire, donc à tester.
VB:
For Each c In [TableauCompétence]
    If Not IsError(c) Then
        n = InStr(c, "*")
        If n Then
            With c.Characters(n, 1).Font
                .Bold = True
                .ColorIndex = 46
                .Size = 25
                .Name = "Bernard MT condensed"
            End With
        End If
   End If
Next
 

Roblochon

XLDnaute Barbatruc
Bonjour,

Idem avec en plus restriction de la macro aux colonnes E à S du tableau;

dites nous éventuellement à quelles plages de cellules la macro doit s'appliquer.

VB:
Sub Backup()
'transformer les * en étoile orange = macro ok

    Dim c As Range, n%
    Application.ScreenUpdating = False
    For Each c In [TableauCompétence].Columns(5).Resize(, 10)
        If Not IsError(c) Then
            n = InStr(c, "*")
            If n Then
                With c.Characters(n, 1).Font
                    .Bold = True
                    .ColorIndex = 46
                    .Size = 25
                    .Name = "Bernard MT condensed"
                End With
            End If
        End If
    Next
End Sub
Cordialement
 
Dernière édition:

mutzik

XLDnaute Barbatruc
bonjour
tu as des cellules en erreur à partir de AA30
j'ai modifie comme suit et c'est ok
VB:
'avant de tester c je teste si la cell contient une erreur

if not iserror(c) then
    suite du traitement
    .
    .
    .
end if'
 

Laliepomm

XLDnaute Nouveau
Merci pour vos retours.
Je regarde cela demain 😁

Pour les plages elles sont dynamiques avec l'ajout de colonnes
En fait cela doit se faire sur toutes les lignes dont l'en-tête de colonne contient mes mots "nom, fonction, ancienneté"... Si vous avez une solution, je prends 😉

Encore merci et je vous dis quoi demain

Bonne soirée
 

Roblochon

XLDnaute Barbatruc
Bonjour,

Voici pour les plages de colonne dynamiques du tableau.
La macro compte le nombre de colonnes contenant "Nom*Fonction*Ancienneté*" puis adapte la plage à parcourir en fonction du résultat à partir de la colonne E.
Si cette colonne de départ doit changer régulièrement de position, il faudra rajouter une ou deux lignes de codes.
Si sa position ne change qu'une fois changez le 5 de
par le nouveau numéro de colonne de départ.

VB:
Sub Backup()
'transformer les * en étoile orange = macro ok

    Dim c As Range, n%
    Dim nCols As Long

    Application.ScreenUpdating = False
    With [TableauCompétence]
        '
        ' Comptage du nombre de colonnes qui contiennent les mots concernés"
        nCols = Application.CountIf(.Rows(0), "Nom*Fonction*Ancienneté*")
        '
        ' Parcourir les cellules à partir de la colonne 5 (E) retaillée à nCols
        For Each c In [TableauCompétence].Columns(5).Resize(, nCols).Cells
            If Not IsError(c) Then
                n = InStr(c, "*")
                If n Then
                    With c.Characters(n, 1).Font
                        .Bold = True
                        .ColorIndex = 46
                        .Size = 25
                        .Name = "Bernard MT condensed"
                    End With
                End If
            End If
        Next
    End With
End Sub

Cordialement
 

Pièces jointes

  • Tableau de compétence et polyvalence - 30 11 2020.xlsm
    255.7 KB · Affichages: 5
Haut Bas