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