Message d'erreur "propriété ou méthode non gérée par cet objet"

Bonjour à toutes et à tous,

J'ai recopier une macro que l'on m'a donné sur ce forum, un message d'erreur s'affiche :

"Propriété ou méthode non gérée par cet objet".

Je vous copie la macro afin que vous puissiez m'aider à trouver l'erreur :

Sub AjouterTH()

Dim LigneRegPersonnel As Integer

Dim DerniereLigneRegPersonnel As Integer

Dim LigneTH As Integer

Dim DerniereLigneTH As Integer

DerniereLigneRegPersonnel = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row

DerniereLigneTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row

For LigneRegPersonnel = 6 To DerniereLigneRegPersonnel

If Sheets(1).Cells(LigneRegPersonnel, 13).Value = "TH" Then

NombreValeursIdentiquesACetteLigneDansTH = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(LigneRegPersonnel, 6).Value)

If NombreValeursIdentiquesACetteLigneDansTH = 0 Then

LigneTH = DerniereLigneTH + 1

Sheets(2).Cells(LigneTH, 1).Value = "TH"

Sheets(2).Cells(LigneTH, 4).Value = Sheets(1).Cells(LigneRegPersonnel, 10).Value

Sheets(2).Cells(LigneTH, 5).Value = Sheets(1).Cells(LigneRegPersonnel, 2).Value

Sheets(2).Cells(LigneTH, 6).Value = Sheets(1).Cells(LigneRegPersonnel, 3).Value

DateDébutRQTH = Left(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)

Sheets(2).Cells(LigneTH, 7).Value = DateSerial(Right(DateDébutRQTH, 2), Mid(DateDébutRQTH, 4, 2), Left(DateDébutRQTH, 2))

DateFinRQTH = Right(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)

Sheets(2).Cells(LigneTH, 8).Value = DateSerial(Right(DateFinRQTH, 2), Mid(DateFinRQTH, 4, 2), Left(DateFinRQTH, 2))

DerniereLigneTH = DerniereLigneTH + 1

End If

End If

Next

End Sub

En vous remerciant par avance.

Emma95

Bonjour Emma95

Merci d'éditer ton post et mettre le code entre balises grâce au bouton "</>"

Ensuite quand tu as cette erreur, tu peux entrer en mode débogage et nous dire quelle ligne est surlignée

Bonjour à tous,

change

Application.CountIfs

par

Application.WorksheetFunction.CountIfs

sinon on besin de plus d'info ou du fichier ...

Bonjour Emma95

Merci d'éditer ton post et mettre le code entre balises grâce au bouton "</>"

Ensuite quand tu as cette erreur, tu peux entrer en mode débogage et nous dire quelle ligne est surlignée

Comment çà?

J'ai mis les signes < et > sur le visual basic mais il ne veut pas, je ne comprends pas ce que vous voulez que je fasse.

Bonjour à tous,

change

Application.CountIfs

par

Application.WorksheetFunction.CountIfs

sinon on besin de plus d'info ou du fichier ...

Bonjour,

Cela ne change rien et je ne peux pas vous transmettre le fichier il contient des informations confidentielles.

Re,

Comment çà?

J'ai mis les signes < et > sur le visual basic mais il ne veut pas, je ne comprends pas ce que vous voulez que je fasse.

Comme ça

Tu sélectionnes ton code et tu cliques sur

2019 04 24 13h17 48

Tu devrais avoir ensuite les balises [ CODE] et [ /CODE] sans espace entre [ et le C

Sinon pour ton code, essaye

NombreValeursIdentiquesACetteLigneDansTH = Application.CountIfs(Sheets(2).Columns(2).Value, Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Columns(3).Value, Sheets(1).Cells(LigneRegPersonnel, 6).Value)

Avec un .Value après Sheets(2).Columns(2) et Sheets(2).Columns(3)

A+

Bonjour,

Tu devrais aussi indenter ton code de façon à le rendre plus lisible et éviter d'utiliser des noms à rallonge pour les variables et bien sûr il est conseillé de ne pas utiliser les accents. Obliges aussi la déclaration des variables obligatoire, tu verras que ça t'évitera de t'arracher les cheveux ! Ton code un peu modifié :

Sub AjouterTH()

    Dim NBValIdent As Long
    Dim Lig As Integer
    Dim DerLig As Integer
    Dim LigTH As Integer
    Dim DerLigTH As Integer
    Dim DateDebut As String
    Dim DateFin As String

    DerLig = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    DerLigTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row

    For Lig = 6 To DerLig

        If Sheets(1).Cells(Lig, 13).Value = "TH" Then

            NBValIdent = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(Lig, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(Lig, 6).Value)

            If NBValIdent = 0 Then

                LigTH = DerLigTH + 1
                Sheets(2).Cells(LigTH, 1).Value = "TH"
                Sheets(2).Cells(LigTH, 4).Value = Sheets(1).Cells(Lig, 10).Value
                Sheets(2).Cells(LigTH, 5).Value = Sheets(1).Cells(Lig, 2).Value
                Sheets(2).Cells(LigTH, 6).Value = Sheets(1).Cells(Lig, 3).Value
                DateDebut = Left(Sheets(1).Cells(Lig, 15).Value, 8)
                Sheets(2).Cells(LigTH, 7).Value = DateSerial(Right(DateDebut, 2), Mid(DateDebut, 4, 2), Left(DateDebut, 2))
                DateFin = Right(Sheets(1).Cells(Lig, 15).Value, 8)
                Sheets(2).Cells(LigTH, 8).Value = DateSerial(Right(DateFin, 2), Mid(DateFin, 4, 2), Left(DateFin, 2))

                DerLigTH = DerLigTH + 1

            End If

        End If

    Next

End Sub

Mais de toute façon, sans fichier, difficile de t'aider !

[quote=BrunoM45 post_id=756346 time=1556104793 user_id=15789]

Re,

Comment çà?

J'ai mis les signes < et > sur le visual basic mais il ne veut pas, je ne comprends pas ce que vous voulez que je fasse.

Comme ça

Tu sélectionnes ton code et tu cliques sur

2019-04-24_13h17_48.png

Tu devrais avoir ensuite les balises [ CODE] et [ /CODE] sans espace entre [ et le C

Sinon pour ton code, essaye

NombreValeursIdentiquesACetteLigneDansTH = Application.CountIfs(Sheets(2).Columns(2).Value, Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Columns(3).Value, Sheets(1).Cells(LigneRegPersonnel, 6).Value)

Avec un .Value après Sheets(2).Columns(2) et Sheets(2).Columns(3)

A+

[/quote]

Sub AjouterTH()

Dim LigneRegPersonnel As Integer
Dim DerniereLigneRegPersonnel As Integer
Dim LigneTH As Integer
Dim DerniereLigneTH As Integer

DerniereLigneRegPersonnel = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
DerniereLigneTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row

For LigneRegPersonnel = 6 To DerniereLigneRegPersonnel
    If Sheets(1).Cells(LigneRegPersonnel, 13).Value = "TH" Then
        NombreValeursIdentiquesACetteLigneDansTH = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(LigneRegPersonnel, 6).Value)
        If NombreValeursIdentiquesACetteLigneDansTH = 0 Then
            LigneTH = DerniereLigneTH + 1
            Sheets(2).Cells(LigneTH, 1).Value = "TH"
            Sheets(2).Cells(LigneTH, 4).Value = Sheets(1).Cells(LigneRegPersonnel, 10).Value
            Sheets(2).Cells(LigneTH, 5).Value = Sheets(1).Cells(LigneRegPersonnel, 2).Value
            Sheets(2).Cells(LigneTH, 6).Value = Sheets(1).Cells(LigneRegPersonnel, 3).Value
            DateDébutRQTH = Left(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
            Sheets(2).Cells(LigneTH, 7).Value = DateSerial(Right(DateDébutRQTH, 2), Mid(DateDébutRQTH, 4, 2), Left(DateDébutRQTH, 2))
            DateFinRQTH = Right(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
            Sheets(2).Cells(LigneTH, 8).Value = DateSerial(Right(DateFinRQTH, 2), Mid(DateFinRQTH, 4, 2), Left(DateFinRQTH, 2))

            DerniereLigneTH = DerniereLigneTH + 1
        End If
    End If
Next

End Sub

bonjour à tous

indenté c'est bien, commenté (et avec son titre et son objectif) c'est encore mieux

amitiés

Vous parlez tous chinois pour moi, je ne connais pas les termes Excel, mon niveau est plus que débutant

Bonjour à tous,

@Emma95

à tester,

Sub AjouterTH()
Dim LigneRegPersonnel As Integer
Dim DerniereLigneRegPersonnel As Integer
Dim LigneTH As Integer
Dim DerniereLigneTH As Integer

DerniereLigneRegPersonnel = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
DerniereLigneTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row

For LigneRegPersonnel = 6 To DerniereLigneRegPersonnel
If Sheets(1).Cells(LigneRegPersonnel, 13).Value = "TH" Then
NombreValeursIdentiquesACetteLigneDansTH = Application.WorksheetFunction.CountIfs(Sheets(2).Range("B1:B100000"), Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Range("C1:C100000"), Sheets(1).Cells(LigneRegPersonnel, 6).Value)
If NombreValeursIdentiquesACetteLigneDansTH = 0 Then
LigneTH = DerniereLigneTH + 1
Sheets(2).Cells(LigneTH, 1).Value = "TH"
Sheets(2).Cells(LigneTH, 4).Value = Sheets(1).Cells(LigneRegPersonnel, 10).Value
Sheets(2).Cells(LigneTH, 5).Value = Sheets(1).Cells(LigneRegPersonnel, 2).Value
Sheets(2).Cells(LigneTH, 6).Value = Sheets(1).Cells(LigneRegPersonnel, 3).Value
DateDébutRQTH = Left(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
Sheets(2).Cells(LigneTH, 7).Value = DateSerial(Right(DateDébutRQTH, 2), Mid(DateDébutRQTH, 4, 2), Left(DateDébutRQTH, 2))
DateFinRQTH = Right(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
Sheets(2).Cells(LigneTH, 8).Value = DateSerial(Right(DateFinRQTH, 2), Mid(DateFinRQTH, 4, 2), Left(DateFinRQTH, 2))

DerniereLigneTH = DerniereLigneTH + 1
End If
End If
Next
End Sub

Vous parlez tous chinois pour moi, je ne connais pas les termes Excel, mon niveau est plus que débutant

Bonjour Emma,

Concrètement fais une copie de ton véritable fichier ...

Et cette copie " Test " ... tu peux l ' Anonymiser ...

C'est à dire totalement transformer tous les noms propres et tous les montants ... pour que rien ne soit reconnaissable ...

et il te sufiit de conserver une dizaine de lignes ... et tu peux supprimer toutes les autres lignes ...

Une fois ce fichier créé ... tu peux le poster sur le Forum ...

Outch... ca s'annonce compliqué

Quand tu as le message d'erreur, tu dois avoir une boite de dialogue qui s'affiche.

Cette boite de dialogue te propose [Fermer] ou [Debogage] clique sur cette dernière option

Tu verras alors ton code apparaitre avec une ligne surlignée en jaune... c'est celle qui pose problème

Fais nous une copie d'écran de cette ligne STP... c'est trop te demander

A+

Un code indenté (décalages dans les instruction avec des tabulations afin d'isoler visuellement les blocs d'instructions) ça peut ressembler à ça :

Sub Test()

    For Lig = 6 To DerLig

        If Sheets(1).Cells(Lig, 13).Value = "TH" Then

            NBValIdent = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(Lig, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(Lig, 6).Value)

            If NBValIdent = 0 Then

                LigTH = DerLigTH + 1

                With Sheets(2)

                    .Cells(LigTH, 1).Value = "TH"
                    .Cells(LigTH, 4).Value = Sheets(1).Cells(Lig, 10).Value
                    .Cells(LigTH, 5).Value = Sheets(1).Cells(Lig, 2).Value
                    .Cells(LigTH, 6).Value = Sheets(1).Cells(Lig, 3).Value
                    DateDebut = Left(Sheets(1).Cells(Lig, 15).Value, 8)
                    .Cells(LigTH, 7).Value = DateSerial(Right(DateDebut, 2), Mid(DateDebut, 4, 2), Left(DateDebut, 2))
                    DateFin = Right(Sheets(1).Cells(Lig, 15).Value, 8)
                    .Cells(LigTH, 8).Value = DateSerial(Right(DateFin, 2), Mid(DateFin, 4, 2), Left(DateFin, 2))

                End With

                DerLigTH = DerLigTH + 1

            End If

        End If

    Next

End Sub

personnellement, j'aime bien rajouter des lignes vides pour éclaircir le code mais beaucoup n'aime pas, chacun sa façon de faire !

ici le même code sans indentation et sans ligne vide :

Sub Test()
For Lig = 6 To DerLig
If Sheets(1).Cells(Lig, 13).Value = "TH" Then
NBValIdent = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(Lig, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(Lig, 6).Value)
If NBValIdent = 0 Then
LigTH = DerLigTH + 1
With Sheets(2)
.Cells(LigTH, 1).Value = "TH"
.Cells(LigTH, 4).Value = Sheets(1).Cells(Lig, 10).Value
.Cells(LigTH, 5).Value = Sheets(1).Cells(Lig, 2).Value
.Cells(LigTH, 6).Value = Sheets(1).Cells(Lig, 3).Value
DateDebut = Left(Sheets(1).Cells(Lig, 15).Value, 8)
.Cells(LigTH, 7).Value = DateSerial(Right(DateDebut, 2), Mid(DateDebut, 4, 2), Left(DateDebut, 2))
DateFin = Right(Sheets(1).Cells(Lig, 15).Value, 8)
.Cells(LigTH, 8).Value = DateSerial(Right(DateFin, 2), Mid(DateFin, 4, 2), Left(DateFin, 2))
End With
DerLigTH = DerLigTH + 1
End If
End If
Next
End Sub

tu peux voir qu'au niveau lecture c'est plus difficile.

Et comme le dit si bien jmd il est très important de commenter son code afin de savoir ce que font les instructions et ceci pour le maintien dans le temps (quand tu reviens dessus des mois ou des années plus tard, tu es content d'avoir expliqué ce qui ce passe)

Pour ajouter un commentaire, tu le fais précéder soit d'une apostrophe soit de l'instruction Rem :

Sub Test()

    Rem ceci est un commentaire

    'ceci est aussi un commentaire

    'avec l'espace et le tiret bas qui forme l'ensemble _
    de retour à la ligne, tu peux écrire le commentaire _
    de cette façon (sans apostrophe en début de ligne)

    Rem ou de cette façon :
    'avec l'espace et le tiret bas qui forme l'ensemble
    'de retour à la ligne, tu peux écrire le commentaire de cette façon

End Sub

re

faire un code "propre" c'est pour soi dans les années qui viennent, mais aussi pour son successeur !

1- les patrons ils n'y connaissent rien pour la plupart et donc ne l'exigent pas de la part de leurs employés codeurs

2- on ne l'apprend pas rigoureusement à l'école

3- c'est beaucoup de temps à passer, temps qui s'additionne aux difficultés techniques du code. Alors on oublie

il est plus important de coder proprement que d'écrire le français sans faute

et pourtant vous savez que je n'aime pas coder

amitiés

Rechercher des sujets similaires à "message erreur propriete methode geree cet objet"