Erreur code vb1004

Bonjour a tous, j'ai écrit un code VBA qui est censé stocker “oui” si la période qui sépare la date du jour de la date de la fin d’au moins l’un des contrats reliés a ce compte est inférieure a 30 jours. Mais il y a une erreur que je ne trouve pas cela m'affiche("Erreur définie par l'application ou par l'objet")voici le code et des images des feuilles nécessaire au code merci d'avance pour votre aide.(données fictive)

Sub Renouvellement_Contrat()
Dim NumeroDuCompteEnCours As Integer
Dim LigneDateFinContrat As Integer
Dim DateFinDeContrt As Date
Dim RenouvellementContrat As String
Worksheets("Comptes_Utilisateurs").Activate
Cells(l, 8).Select
ActiveCell().Value = "Rappel de renouvellement du contrat"
ActiveCell().Offset(1, 0).Select
For LigneCompte = 2 To 31
NumeroDuCompteEnCours = ActiveCell().Offset(0, -7).Value
LigneDateFinContrat = 3
RenouvllemntContrat = ""
Do
If Worksheets("Contrat").Cells(LigneDateFinContrat, 4).Value = NumeroDucCompteEnCours Then
DateFinContrat = Worksheets("Contrats").Cells(LigneDateDinContrat, 4).Value
If Abs(DateFinContrat - Date) < 30 Then
RenouvellementContrat = "oui"
ElseIf DateFinContrat - Date < 0 Then
RenouvellementContrat = "Expiré"
Else
End If
Else
End If
LigneDateFinContrat = LigneDateFinContrat + 1
Loop Until Cells(LigneDateFinContrat, 4).Value = ""
ActiveCell.Value = RenouvellementContrat
ActiveCell().Offset(1, 0).Select
Next LigneCompte

End Sub

compte contrats

Bonjour,

Tu as écrit " ActiveCell() .... " > les () sont de trop ...

Un coup d'oeil en diagonale > il y aurait 4 endroits à corriger ...

ric

bonjour j'ai bien relue et corriger des petites fautes mais l'erreur s'affiche toujours .

Bonjour,

Plusieurs petits coquilles ...

Un essai ...

Sub Renouvellement_Contrat()
Dim NumeroDuCompteEnCours As Integer
Dim LigneDateFinContrat As Integer
Dim DateFinDeContrt As Date
Dim RenouvellementContrat As String

   Worksheets("Comptes_Utilisateurs").Activate
   Cells(1, 8).Select
   ActiveCell.Value = "Rappel de renouvellement du contrat"
   ActiveCell.Offset(1, 0).Select
   For LigneCompte = 2 To 31
      NumeroDuCompteEnCours = ActiveCell.Offset(0, 7).Value
      LigneDateFinContrat = 3
      RenouvellemntContrat = ""
      Do
         If Worksheets("Contrats").Cells(LigneDateFinContrat, 4).Value = NumeroDucCompteEnCours Then
            DateFinContrat = Worksheets("Contrats").Cells(LigneDateFinContrat, 4).Value
            If Abs(DateFinContrat - Date) < 30 Then
               RenouvellementContrat = "oui"
            ElseIf DateFinContrat - Date < 0 Then
               RenouvellementContrat = "Expiré"
            Else
            End If
         Else
         End If
         LigneDateFinContrat = LigneDateFinContrat + 1
      Loop Until Cells(LigneDateFinContrat, 4).Value = ""
      ActiveCell.Value = RenouvellementContrat
      ActiveCell.Offset(1, 0).Select
   Next LigneCompte
End Sub

ric

Bonjour, merci de aide

j'ai fait l'essai cela ne m'affiche aucune erreur mais dans la colonne H rappel de fin de contrat rien ne s'affiche je suis vraiment perdu.

Bonjour,

Sans fichier représentatif afin de tester la chose > c'est bien difficile de trouver la coquille ...

Peut-être des données au mauvais format > ou quelque chose du genre ...

Mais, je peux dire que le code fonctionne > il y a sûrement une condition qui ne s'avère pas selon les données de ton fichier.

Si ton fichier contient des données confidentielles > à partir d'une copie > tu peux employer cet utilitaire pour l'anonymiser ...

https://www.excel-pratique.com/fr/utilitaires/anonymisation-donnees

ric

bonjour, ce sont des données fictive mais je n'aimerais pas que mon travail puisse tomber dans les mains de n'importe qui il a t-il un chat priver pour que je puisse vous l'envoyer ?

Bonjour,

J'ai débarré temporairement mes messages privés ...

Clique sur le V en dessous des informations sous mon avatar > une enveloppe apparaît > clique dessus pour m'écrire en privé > tu pourras y attacher le fichier ...

ric

Bonjour,

Voici 2 propositions ...

1- le code soumis comprenant les corrections ( il est placé dans la feuille "Comptes_utilisateurs" ) ...
En déclarant les variables, tu as mis des lettres majuscules > c'est excellent ...
En écrivant le code > écris en minuscule > en changeant de ligne > si la variable correspond à la déclaration > les lettres majuscules vont s'afficher > ainsi > l'on évite les erreurs de frappe ...

Sub Renouvellement_Contrat()
Dim NumeroDuCompteEnCours As Integer
Dim LigneDateFinContrat As Integer
Dim DateFinDeContrat As Date
Dim RenouvellementContrat As String
Dim LigneCompte As Integer

   Worksheets("Comptes_Utilisateurs").Activate
   Cells(1, 8).Select
   ActiveCell.Value = "Rappel de renouvellement du contrat"
   ActiveCell.Offset(1, 0).Select
   For LigneCompte = 2 To 31
      NumeroDuCompteEnCours = ActiveCell().Offset(0, -7).Value
      LigneDateFinContrat = 2
      RenouvellementContrat = ""
      Do
         If Worksheets("Contrats").Cells(LigneDateFinContrat, 1).Value = NumeroDuCompteEnCours Then
            DateFinDeContrat = Worksheets("Contrats").Cells(LigneDateFinContrat, 4).Value
            If Abs(DateFinDeContrat - Date) < 30 Then
               RenouvellementContrat = "oui"
            ElseIf DateFinDeContrat - Date < 0 Then
               RenouvellementContrat = "Expiré"
            Else
            End If
         Else
         End If
         LigneDateFinContrat = LigneDateFinContrat + 1
      Loop Until Cells(LigneDateFinContrat, 4).Value = ""
      ActiveCell.Value = RenouvellementContrat
      ActiveCell().Offset(1, 0).Select
   Next LigneCompte
End Sub

2- une version bien différente > car tu utilises des tableaux structurés ...
Par contre, ce code-ci devra être placé dans un module > pas dans la feuille ...

J'ai modifié ce code

Sub Renouvellement_Contrat()  ' << version pour tableaux structurés >>
Dim DateFinDeContrat As Date
Dim Cu As Range   ' pour comptes utilisateur
Dim Co As Range   ' pour contrat

   Application.ScreenUpdating = False  ' gèle l'affichage de l'écran pour la rapidité d'exécution

   For Each Cu In Range("comptes_utilisateur[id_compte_utilisateur]") ' <<< modif ' boucle de la ligne 2 jusqu'à la dernière ligne
   For Each Co In Range("contrats[id_contrat]")          ' idem
         If Co.Value = Cu.Value Then                     ' si les numéros de contrats correspondent
            DateFinDeContrat = Range("contrats[date_fin]").Cells(Co.Row - 1).Value  ' mémorise la date
            If Abs(DateFinDeContrat - Date) < 30 Then
               Range("comptes_utilisateur[Rappel de renouvellement du contrat]").Cells(Cu.Row - 1) = "oui"
            ElseIf DateFinDeContrat - Date < 0 Then
               Range("comptes_utilisateur[Rappel de renouvellement du contrat]").Cells(Cu.Row - 1) = "Expiré"
            Else
                ' vide la cellule si ne correspond pas aux critères (cas où les dates ont changé)
               Range("comptes_utilisateur[Rappel de renouvellement du contrat]").Cells(Cu.Row - 1).ClearContents
            End If
            Exit For  ' sort le la 2e boucle
         End If
      Next Co
   Next Cu
End Sub

ric

bonjour je vous remercie pour l'aide que vous m'apporter mais dans la colonne cela n'indique pas est expirer ou non

bien a vous,merci

Bonjour,

Si tu as utilisé le code de la 1re proposition > ça devrait fonctionner ...

Si tu as utilisé le code de la 2e proposition > effectivement > il y a une coquille ...

Lors du codage > j'ai commis une erreur et je n'avais pas remarqué que l'en-tête de colonne avait elle aussi changé ...

J'ai corrigé le code que j'ai soumis précédemment > il n'y a que l'en-tête de colonne à changer dans le code ...

Désolé pour la coquille ...

Ce n'est pas
Range("comptes_utilisateur[Colonne1]")
Mais ...
Range("comptes_utilisateur[id_compte_utilisateur]")

ric

bonjour, j'ai utiliser les 2 codes mais cela ne m'affiche toujours rien dans la colonne je comprend plus le 1 donc j'ai essayer plusieurs et aussi en essayant de changer mais cela ne veut toujours pas .

merci, bien a vous.

Bonjour,

Je t'ai retourné ton fichier en MP ...

ric

Bonjour,

Dans la feuille "Comptes_utilisateurs" > est-ce que le tableau se nomme bien "comptes_utilisateur" ?

Est-ce que la 1re colonne de ce tableau porte bien l'en-tête "id_compte_utilisateur" ?

Si tu as une erreur sur la ligne ...

For Each Cu In Range("comptes_utilisateur[id_compte_utilisateur]")

C'est sûrement le nom du tableau ou de l'en-tête ...

Sinon, il ne reste que la déclaration de la variable : Dim Cu As Range

Ces 3 vérifications faites > il n'y a pas de raison que le code arrête sur cette ligne ...

ATTENTION : Le nom de la feuille ne doit pas être identique au nom du tableau > dans le fichier exemple > ce n'est pas le cas ...

Si tu as encore une erreur > quelle est la version de Excel ? >> et est-ce Excel sur PC ou sur Mac > ce n'est indiqué dans ton profil ...

ric

Bonjour, la feuille ce nome bien "Comptes_utilisateurs" et la premier colonne se nomme bien aussi "id_compte_utilisateur" j'ai changer et mis les noms qui correspondent.par contre je ne sais pas comment voir le nom que porte mon tableau. En ce qui concerne m'a version d'Excel je suis sur mac sous la version 16.44 (20121301).

Bien a vous.

Bonjour,

Si tu roules sur MAC > je ne peux pas tester le code > je ne peux le tester que sous Windows ...
Il y a des différences de codage selon les objets > là s'arrête mon expertise en la matière ...

Il serait bon d'indiquer dans ton profil que tu roules sous mac > plusieurs forumeurs roulent eux-aussi sous MAC.

À chaque fois que j'écris "sous Mac" > je pense au "sumac vénéneux" ...

Si j'avais su > je ne serai pas intervenue > MAC > c'est trop cher pour mes modestes moyens > m'enfin ...

Pour voir le nom du tableau, il y a 2 méthodes ...

1- sélectionne n'importe quelle cellule du tableau > en haut dans le menu vers la droite > il devrait apparaître "Création de tableau" ...
En cliquant sur "Création de tableau" > complètement à gauche > survient "Nom du tableau" ...

2- menu "Formules" > "Gestionnaire des noms" > dans le cas de ce fichier > les tableaux n'ont pas été identifiés dans leur nom ...
Exemple : le tableau se nomme "comptes_utilisateur" > rien n'indique que c'est un tableau ...
Si le tableau se nommait "Tableau_comptes_utilisateur" > il serait immédiatement repérable dans la liste ...

Dans ce cas-ci > la méthode 1 s'avère plus pertinente ...

ric

bonjour, la maintenant je suis sur mac mais sinon le projet se déroule sur windows a mon bureau mon mac est mon pc portable que j'utilise de temps en temps pour travailler a la maison sinon le projet a été fait entièrement sur windows.

Bien a vous

car Excel sur mac n'est vraiment pas terrible.

Rechercher des sujets similaires à "erreur code vb1004"