Erreur d'exécution 1004 impossible lire texte de la classe RANGE

Je viens de créer récemment deux feuilles dans mon classeur pour gérer les accès par différents utilisateurs. Jusqu'à présent mon classeur fonctionnait bien mais l'ajout de ces deux feuilles me génère le message d'erreur "Impossible de lire la propriété texte de la classe range.

Ce message intervient seulement à l'ouverture du classeur lorsque l'on valide l'utilisateur et le mot de passe. Si dans la continuité on revient sur la feuille "Accès" le problème ne se pose plus.

Si je déconnecte au démarrage du classeur la connection à cette feuille "Accès", je n'ai pas de problème apparent.

Je n'arrive pas à comprendre ce qui provoque ce message.

Je vous joins un lien pour télécharger le fichier. Pour des raisons de confidentialité j'ai dû retirer un maximum de feuilles qui génèrent pour certaines des erreurs détectées de formules qui ne sont pas en lien avec l'erreur précitée.

Je débute et je découvre le code VBA? J'ai beaucoup progressé grâce en l’occurrence à votre bonne volonté, mais il y a encore un grand bout de chemin à faire.

Merci par avance de votre retour, sinon j'abandonnerai ce contrôle utilisateur en attendant que je murisse un peu plus dans la connaissance.

Bonjour,

Accepte le débogage et supprime les 3 ".Text" qui provoque l'erreur.

A+

Bonjour,

Merci pour ta réponse, néanmoins j'ai bien retiré les .text comme tu me l'as demandé.

Il s'avère à présent que j'ai une erreur de compilation une erreur de syntaxe.

Voici ce que représente les lignes à présent suivant tes recommandations si j'ai bien compris.

Ligne de code après corrections

Option Explicit

'************************************************************

'Contrôle qu'il n'y a pas un message d'erreur dans les Ventes

'************************************************************

Sub Controle_Erreur_Ventes()

Dim Derli3 As Integer 'Dernière ligne

Dim r3 As Integer 'Compteur

Dim Activite As String

Dim Type_Activite As String

Dim Srep As String

Derli3 = 23 'Positionnement de la dernière ligne de contrôle

For r3 = 10 To Derli3 Step 1

Type_Activite = Worksheets("Ventes").Range("O" & r3)

If Worksheets("Ventes").Range("O" & r3 = "Erreur" Then

Activite = Worksheets("Ventes").Range("H" & r3)

Srep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _

& Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les catégories d'activité. " & _

Chr(10) & Chr(10) & " Veuillez vérifier dans le chapitre Activités directes de l'entreprise, la catégorie de vente : " & Chr(10) & _

Chr(10) & " - " & Activite, vbCritical + vbOKOnly _

, "Prévisions ventes")

If Srep = vbOK Then

Sheets("Ventes").Activate

Range("O" & r3).Select

Exit Sub

End If

End If

Next r3

End Sub

Ligne de code avant correction

Option Explicit

'************************************************************

'Contrôle qu'il n'y a pas un message d'erreur dans les Ventes

'************************************************************

Sub Controle_Erreur_Ventes()

Dim Derli3 As Integer 'Dernière ligne

Dim r3 As Integer 'Compteur

Dim Activite As String

Dim Type_Activite As String

Dim Srep As String

Derli3 = 23 'Positionnement de la dernière ligne de contrôle

For r3 = 10 To Derli3 Step 1

Type_Activite = Worksheets("Ventes").Range("O" & r3).Text

If Worksheets("Ventes").Range("O" & r3).Text = "Erreur" Then

Activite = Worksheets("Ventes").Range("H" & r3).Text

Srep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _

& Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les catégories d'activité. " & _

Chr(10) & Chr(10) & " Veuillez vérifier dans le chapitre Activités directes de l'entreprise, la catégorie de vente : " & Chr(10) & _

Chr(10) & " - " & Activite, vbCritical + vbOKOnly _

, "Prévisions ventes")

If Srep = vbOK Then

Sheets("Ventes").Activate

Range("O" & r3).Select

Exit Sub

End If

End If

Next r3

End Sub

qu'est-ce qui peut faire que ce controle vente fonctionne bien si je désactive la page "Accès"

Peux-tu préciser éventuellement

Dans le principe si la condition est remplie j'affiche dans la cellule le message "ERREUR", et c'est sur ce message que je fais un contrôle.

Merci à l'avance de ton retour.

Salut tout le monde,

essaie comme ca

Option Explicit
'************************************************************
'Contrôle qu'il n'y a pas un message d'erreur dans les Ventes
'************************************************************
Sub Controle_Erreur_Ventes()
Dim Derli3 As Integer   'Dernière ligne
Dim r3 As Integer      'Compteur
Dim Activite As String
Dim Type_Activite As String
Dim Srep As String

Derli3 = 23 'Positionnement de la dernière ligne de contrôle

    For r3 = 10 To Derli3 Step 1
        Type_Activite = Worksheets("Ventes").Range("O" & r3).Value

         If Worksheets("Ventes").Range("O" & r3).Value = "Erreur" Then
            Activite = Worksheets("Ventes").Range("H" & r3).Value
              Srep = MsgBox("A la suite vraisemblablement de modifications de paramètres, vous avez généré des erreurs qu'il vous faut corriger ! " _
              & Chr(10) & Chr(10) & "Il n'y pas de concordance entre les catégories de vente et les catégories d'activité. " & _
            Chr(10) & Chr(10) & " Veuillez vérifier dans le chapitre Activités directes de l'entreprise, la catégorie de vente : " & Chr(10) & _
            Chr(10) & "          - " & Activite, vbCritical + vbOKOnly _
            , "Prévisions ventes")
            If Srep = vbOK Then
            Sheets("Ventes").Activate
                Range("O" & r3).Select
                Exit Sub
            End If

         End If
   Next r3
End Sub

bonne nuit

Bonjour,

Prière d'utiliser les balises CODE quand tu cites du VBA...

balisecode1

Il manque la parenthèse fermante avant " = Erreur" (dans ce que tu viens de montrer)

err1

qu'est-ce qui peut faire que ce controle vente fonctionne bien si je désactive la page "Accès"

Ça je ne sais pas... Mais tu ferais bien de faire de fréquentes copies (SaveCopyAs) de ton classeur en plus des sauvegardes car ton classeur est bien gros et ton code bien peu optimisé dans tous les modules.

Si ça ne remarche pas impec après ajout de cette parenthèse, ça pourrait bien être que le compilateur commence à perdre les pédales... Et les premiers prémices d'une cata imminente !

A ta place je commencerai à faire un gros ménage dans tout le VBA !

A+

Bonjour Galopin01

J'ai noté pour la prochaine fois en ce qui concerne les balises.

J'ai vu pour le caractère manquant, je suis tellement fixé sur le problème que je n'ai pas vu.

Tu évoques l'optimisation du code, mais je suis autodidacte, c'est ma première application et j'ai avancé petit à petit.

Comment faire pour optimisé, si tu as un conseil précis sur ce sujet ou une méthode à me communiquer je suis preneur.

J'ai noté pour les sauvegardes. Je vais faire des sauvegardes par "version".

Le .value conseillé par m3ellem1 » résoud le problème

Merci à vous deux

Normalement tu n'as même pas besoin de Value puisque c'est la propriété par défaut pour Range. Donc la suppression des .Text devrait résoudre le problème à elle seule.

En matière d'optimisation tu peux déjà commencer par enlever tout ce qui sert à rien. En particulier dans les commentaires. :

Dans Sub Actualisation_Données()
' Actualisation des données
    ActiveWorkbook.RefreshAll
End Sub

... La deuxième ligne est inutile !

Pour cette Sub ce qui suit est le minimum :

Option Explicit
Sub Nouveau_Client()
Dim i%
For i = 14 To 34 Step 2
   Cells(i, 7).ClearContents
Next
   Cells(14, 7) = "Monsieur"
With ActiveWorkbook.Worksheets("Data client")
   .Sort.SortFields.Clear
   .Sort.SortFields.Add Key:=Range("B2:B7"), SortOn:=xlSortOnValues, _
   Order:=xlAscending, DataOption:=xlSortNormal
   .Sort
        .SetRange Range("A1:K7")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("Clients").Select
    Range("G14").Select
End Sub

... Mais on peut surement encore réduire de moitié. Seulement comme on ne sait pas comment est appelé cette macro ni quelle est la feuille active au départ, je ne peux pas dire plus.

C'est comme le ActiveWorkbook : A priori il ne sert à rien, mais je l'ai laissé car comme il n'y a pas de Worksheets("Data client") dans ton classeur je ne peux pas me prononcer, mébon... vu le nombre de feuille qui semblent manquer dans le classeur on peut penser que TOUSSA se passe dans le même classeur...

C'est exactement le m^me problème pour cette macro qu'on pourrait surement encore diviser par 2... :

Option Explicit
Sub Creation_Client()
Dim WsC As Worksheets, WsDC As Worksheets, i%, k
Set WsDC = Worksheets("Data client")
Set WsC = Worksheets("Client")
With WsDC
   .Rows("3:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   For i = 14 To 36
      .Cells(3, k + 1) = WsC.Cells(i, 7)
      k = k + 1
   Next
   .Columns("A:M").AutoFit
   .Cells.Select
      Application.CutCopyMode = False
   .Sort.SortFields.Clear
   .Sort.SortFields.Add Key:=Range("B2:B3013"), SortOn:=xlSortOnValues, _
     Order:=xlAscending, DataOption:=xlSortNormal
   .Sort
       .SetRange Range("A1:M3013")
       .Header = xlYes
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
End With
    Sheets("Clients").Select
    Range("G16").Select
End Sub

Dans cette macro cette ligne suffit :

Sub MasqueCol()
Columns("A:E").Hidden = True
End Sub

idem pour cette autre :

Sub AfficheCol()
Columns("A:E").Hidden = False
End Sub

Voici une premières réduction du Module Menu_Paramètres :

Option Explicit
Sub Menu_Calendrier()
    Worksheets("Parametres").Range("B29:W29").Select
End Sub
Sub Menu_Gestion_Personnel()
    Worksheets("Parametres").Worksheets("Parametrs").Range("B37:W37").Select
End Sub
Sub Menu_Parametres_Divers()
    Worksheets("Parametres").Range("B67:W67").Select
End Sub
Sub Menu_Parametres_Defaut()
    Worksheets("Parametres").Range("B102:W102").Select
End Sub
Sub Menu_Donnees_Commerciales()
    Worksheets("Parametres").Range("B110:W110").Select
End Sub
Sub Menu_Frais_Activité()
    Range("B128:W128").Select
End Sub
Sub Menu_Frais_Exercice()
    Range("B141:W141").Select
End Sub
Sub Menu_Parametres_Impression()
    Worksheets("Parametres").Range("B159:W159").Select
End Sub
Sub Menu_Periodes_Comptables()
    Worksheets("Parametres").Range("B167:W167").Select
End Sub
Sub Menu_Coordonnees()
    Worksheets("Parametres").Range("B10:W10").Select
End Sub

... Mais on pourrait encore réduire ça de moitié !

Bon je te passe la suite que tu porras travailler sur ces modèles.

Il reste encore pas mal de chose qu'on pourrait faire, mébon... Déjà quand tu auras tout travaillé comme ça, p'tre bien que ton VBA, il va retrouver une seconde jeunesse !

Nota : Il est possible que dans mes exemples se soient glissées quelques bogues : Comme je n'ai pas les feuilles correspondantes je ne peux pas vérifier. Je travaille un peu avec une boule de cristal... Mais sur le fond à une virgule près, je ne suis pas loin du compte !

A+

Pour la route je t'en donne encore une ou 2 :

Sub Nouvelle_Etude()
Range("J9:R10,J11:L13,Z11:AA11,AB11:AK11,Z12:AA12,AB12:AG12,Z15:AK15,AJ17:AL17,AJ18:AL20,AM17:AO20," & _
   "H22:K23,M22:P23,R22:U23,AF22:AI25,AF27:AI27,AF28:AI28,AD31:AI34,AF31:AI33,AF36:AO36,E41:F42").ClearContents
Range("A1").Select
End Sub

et cette autre :

Sub RAZ_RechercheClient()
   ' Remise à blanc de la recherche avancée des clients, pour éviter un affichage de données à l'ouverture du formulaire saisie documents
   Sheets("Data_Client").Range("W2:AN2").ClearContents
   Sheets("Saisie_Doc").Select '(si elle n'est pas déjà active !
End Sub

Enfin la Sub Sub Enregistrer_Devis() est batie sur le même principe que la Sub Creation_Client() (plus haut...)

On pourrait lui appliquer avec bénéfice le même traitement !

A+

Merci pour ces conseils, je vais mettre en application.

Pour info, effectivement il n'y a pas toutes les feuilles.

Pour ce qui est du .value, j'ai noté que c'était par défaut.

Tu as fait des études spécifiques pour apprendre le langage VBA, car je ne sais pas trop ou me tourner pour approfondir mes connaissances.

Je me rends bien compte, que même si mes lignes de code fonctionnent, ce n'est pas forcément bien élaboré en tant qu'optimisation.

Je dois réaliser à la suite de mon application une gestion planning avec une liaison de données de ce tableau.

Ca devient ardu.

Merci pour tes conseils.

Bonjour,

Non pas de formation particulière, mais je suis tombé dans l'informatique bien avant Windows. J'ai subi Excel et Access à haute dose dès leur apparition dévorés des kilomètres de documentation papier et de nombreux bouquins concernant la programmation et de nombreux langages...

De plus depuis 20 ans j'ai du participer à au moins 20 000 fils les plus divers sur de nombreux forums et épluchés probablement plus de 50 000 autres : C'est très formateur ! Et aussi très chronophage...

A+

OK je suis sur la bonne voie, il faut que j'avale les lignes. LOL...

Merci encore à toi et bonne continuation, et peut-être à plus pour un nouvel appel à tes recommandations.

C'est grâce à vous que nous progressons ou que nous sortons de l'ornière.

Rechercher des sujets similaires à "erreur execution 1004 impossible lire texte classe range"