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...
Il manque la parenthèse fermante avant " = Erreur" (dans ce que tu viens de montrer)
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.