Conflit entre deux Userform
Bonjour,
voici l'erreur : La méthode select de la worksheets a échoué
Pris séparément mes deux Userform fonctionnent bien.
Userform1 qui sert à la saisie de données et Userform2 qui permet l'identification au lancement de l'application après la saisie d'un mot de passe (Workbook_Open).
Vu que c'est la première fois que j'utilise les userform, il est clair que je n'ai pas tout compris. d'autant que j'ai encore trois userform à réaliser pour terminer l'application permettant une petit gestion d'association.
Dans l'attente merci pour votre aide.
Au lancement de l'application
Option Explicit 'Activation de la déclaration explicite des variables
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Sheets("Tables").Visible = False
Sheets("Historiquegestion").Visible = False
Sheets("Cadencier boissons chiffré").Visible = False
Sheets("Inventaire Stock Fin année").Visible = False
Sheets("Tableau Remb.Frais").Visible = False
Sheets("fiche situation membres").Visible = False
Sheets("Grd.Livre").Visible = False
Sheets("Compte résultat").Visible = False
Sheets("Relevé Bancaire").Visible = False
Sheets("Recettes").Visible = False
Sheets("Charges").Visible = False
Sheets("Caisse Manifestations").Visible = False
Sheets("Caisse Journalière").Visible = False
Sheets("Journal suivi Chéquiers ").Visible = False
Sheets("Explication Bilan").Visible = False
Sheets("Menu").Visible = True
Sheets("Menu").Select
Load UserForm2
UserForm2.Show
End SubAprès l'affichage de l'Userform2, sélection de l'opérateur à partir d'une Combobox, saisie MP et validation et accès à certaines feuilles suivant autorisation.
Private Sub CommandButton1_Click()
Dim mpass As Variant
Dim Identifiant As String
Dim xligne, ok As Integer
Dim ok As Integer
mpass = UserForm2.TextBox1.Value
Identifiant = UserForm2.ComboBox1.Value
xligne = 2
' les indentifiants
' *****************
' Président
' Trésorier
' Directeur Sportif
' Secrétaire
' membre comité
' membre autorisé
'
' MP = ex : 769115, 250001, 895623,265123,123456,100001
' ***********************************
' Liste des feuilles de la gestion
' ***********************************
' Caisse Journalière
' Caisse Manifestations
' Charges
' Recettes
' Relevé Bancaire
' Compte résultat
' Grd.Livre
' fiche situation membres
' Fiches permanences
' Journal suivi Chéquiers
' Tableau Remb.Frais
' Inventaire Stock Fin année
' Cadencier boissons chiffré
' Feuille relevé stock boissons
' Tables
' Historiquegestion
' Explication Bilan
Sheets("Tables").Select
ok = 0
' accès président
If Range("E8").Value = Val(mpass) And Worksheets("Tables").Range("D8") = Identifiant Then
Sheets("Historiquegestion").Visible = True
Sheets("Cadencier boissons chiffré").Visible = True
Sheets("Inventaire Stock Fin année").Visible = True
Sheets("Tableau Remb.Frais").Visible = True
Sheets("fiche situation membres").Visible = True
Sheets("Grd.Livre").Visible = True
Sheets("Feuille relevé stock boissons").Visible = True
Sheets("Compte résultat").Visible = True
Sheets("Relevé Bancaire").Visible = True
Sheets("Recettes").Visible = True
Sheets("Charges").Visible = True
Sheets("Caisse Manifestations").Visible = True
Sheets("Caisse Journalière").Visible = True
Sheets("Explication Bilan").Visible = True
Sheets("Journal suivi Chéquiers ").Visible = True
ok = 1
End If
' accès trésorier
If Range("E9").Value = Val(mpass) And Worksheets("Tables").Range("D9") = Identifiant Then
' Sheets("Historiquegestion").Visible = True
Sheets("Cadencier boissons chiffré").Visible = True
Sheets("Inventaire Stock Fin année").Visible = True
Sheets("Feuille relevé stock boissons").Visible = True
Sheets("Tableau Remb.Frais").Visible = True
Sheets("fiche situation membres").Visible = True
Sheets("Grd.Livre").Visible = True
Sheets("Compte résultat").Visible = True
Sheets("Relevé Bancaire").Visible = True
Sheets("Recettes").Visible = True
Sheets("Charges").Visible = True
Sheets("Caisse Manifestations").Visible = True
Sheets("Caisse Journalière").Visible = True
Sheets("Explication Bilan").Visible = True
Sheets("Journal suivi Chéquiers ").Visible = True
ok = 1
End If
' accès directeur sportif
If Range("E10").Value = Val(mpass) And Worksheets("Tables").Range("D10") = Identifiant Then
Sheets("Inventaire Stock Fin année").Visible = True
Sheets("Tableau Remb.Frais").Visible = True
Sheets("fiche situation membres").Visible = True
Sheets("Feuille relevé stock boissons").Visible = True
ok = 1
End If
' accès secrétaire
If Range("E11").Value = Val(mpass) And Worksheets("Tables").Range("D11") = Identifiant Then
Sheets("Inventaire Stock Fin année").Visible = True
Sheets("Tableau Remb.Frais").Visible = True
Sheets("fiche situation membres").Visible = True
Sheets("Feuille relevé stock boissons").Visible = True
Sheets("Explication Bilan").Visible = True
Sheets("Grd.Livre").Visible = True
Sheets("Compte résultat").Visible = True
ok = 1
End If
' accès membre comité
If Range("E12").Value = Val(mpass) And Worksheets("Tables").Range("D12") = Identifiant Then
Sheets("Inventaire Stock Fin année").Visible = True
Sheets("Tableau Remb.Frais").Visible = True
Sheets("fiche situation membres").Visible = True
Sheets("Feuille relevé stock boissons").Visible = True
ok = 1
End If
' accès membre autorisé
If Range("E13").Value = Val(mpass) And Worksheets("Tables").Range("D13") = Identifiant Then
ok = 1
End If
If ok = 1 Then
' enregistrement de l'accès dans historique
Sheets("Historiquegestion").Visible = True
Sheets("Historiquegestion").Select
yligne = Range("B9500").End(xlUp).Row + 1
Cells(yligne, 2) = Identifiant
Cells(yligne, 3) = Date
Cells(yligne, 4) = "Accès"
Cells(yligne, 6) = "Heure : " & Time
Sheets("Tables").Select
If Identifiant <> "Président" Then
Sheets("Historiquegestion").Visible = False
End If
Else
' enregistrement de l'accès dans historique
Sheets("Historiquegestion").Visible = True
Sheets("Historiquegestion").Select
yligne = Range("B9500").End(xlUp).Row + 1
Cells(yligne, 2) = Identifiant
Cells(yligne, 3) = Date
Cells(yligne, 4) = "Echec Accès"
Cells(yligne, 5) = "MP " & mpass
Cells(yligne, 6) = "Heure : " & Time
Sheets("Tables").Select
Sheets("Historiquegestion").Visible = False
End If
Sheets("Tables").Visible = False
Sheets("Menu").Select
Sheets("Menu").Unprotect "769115"
Cells(4, 2) = "Bonjour " & Identifiant
Sheets("Menu").Protect "769115"
Unload UserForm2
End Sub
Private Sub UserForm_Initialize()
' Call UserAcces
Sheets("Tables").Visible = True
Sheets("Tables").Select
Dim c10 As Variant
' Combobox avec liste des noms et prenoms
For Each c10 In Range("D8:D" & [D20].End(xlUp).Row)
UserForm2.ComboBox1.AddItem c10
Next c10
Sheets("Menu").Select
End SubUserform1 permettant la saisie, en cliquant sur un bouton l'appel de la saisie se fait à partir de cette Macro
Sub saisieCJ()
'
' SaisieCJ Macro
' charge userform
Load userform1
userform1.Show
'
End SubOption Explicit 'Activation de la déclaration explicite des variables
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
Private Sub CommandButton2_Click()
'Correspond au programme du bouton QUITTER
Unload userform1
'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
' Me => Référence à l'objet en cours
Sheets("Menu").Select
End Sub
' annaluation et historisation de la ligne
Private Sub CommandButton3_Click()
' Initialise les variables
Dim Dligne As Integer
Dim ColorLigne As Integer
Dim Mbillard As Integer
Dim MBar As Integer
Dim MCours As Integer
Dim MRepas As Integer
Dim MOffert As Integer
Dim MVerse As Integer
Dim RestePayer As Integer
Dim NPiece As String
Dim NomPrenom As String
Dim Observation As String
Dim DateJ As Date
Dim NChq As String
Dim ModeP As String
Dim rep As String
' selectionne la feuille
Sheets("Caisse Journalière").Select
' Derniere ligne saisie du fichier
Dligne = Range("E9500").End(xlUp).Row
If Cells(Dligne, 18) = "Annulé" Then
Exit Sub
End If
If Me.TextBox4.Value <> "" Then
MBar = Cells(Dligne, 12)
MBar = MBar * -1
End If
If Me.TextBox5 <> "" Then
Mbillard = Cells(Dligne, 11)
Mbillard = Mbillard * -1
End If
If Me.TextBox7 <> "" Then
MCours = Cells(Dligne, 13)
MCours = MCours * -1
End If
If Me.TextBox6 <> "" Then
MRepas = Cells(Dligne, 14)
MRepas = MRepas * -1
End If
If Me.TextBox8 <> "" Then
MOffert = Cells(Dligne, 15)
MOffert = MOffert * -1
End If
If Me.TextBox9 <> "" Then
MVerse = Cells(Dligne, 17)
MVerse = MVerse * -1
End If
NPiece = Cells(Dligne, 5)
NomPrenom = Cells(Dligne, 6)
Observation = Cells(Dligne, 7)
DateJ = Cells(Dligne, 8)
NChq = Cells(Dligne, 9)
ModeP = Cells(Dligne, 10)
MVerse = Cells(Dligne, 17)
RestePayer = ((MBar + Mbillard + MCours + MRepas) - MOffert) - MVerse
rep = MsgBox("Voulez-vous confirmer ?", vbYesNo + vbQuestion, "Annulation de la dernière saisie")
If rep = vbYes Then
' historique
Sheets("Historiquegestion").Select
Dligne = Range("E9500").End(xlUp).Row + 1
Cells(Dligne, 3) = Date
Cells(Dligne, 4) = "Saisie annulation"
Cells(Dligne, 5) = NPiece
Cells(Dligne, 6) = NomPrenom
Cells(Dligne, 7) = Observation
Cells(Dligne, 8) = DateJ
Cells(Dligne, 9) = NChq
Cells(Dligne, 10) = ModeP
Cells(Dligne, 11) = Mbillard
Cells(Dligne, 12) = MBar
Cells(Dligne, 13) = MCours
Cells(Dligne, 14) = MRepas
Cells(Dligne, 15) = MOffert
Cells(Dligne, 16) = MVerse
Sheets("Caisse Journalière").Select
Dligne = Range("E9500").End(xlUp).Row
' ...
' Color rouge le texte d'annulation de la derniere saisie
Range("R" & [Dligne]).Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
' ici le traitement si réponse positive
Cells(Dligne, 5) = NPiece
Cells(Dligne, 6) = NomPrenom
Cells(Dligne, 7) = Observation
Cells(Dligne, 8) = DateJ
Cells(Dligne, 9) = NChq
Cells(Dligne, 10) = ModeP
Cells(Dligne, 11) = Mbillard
Cells(Dligne, 12) = MBar
Cells(Dligne, 13) = MCours
Cells(Dligne, 14) = MRepas
Cells(Dligne, 15) = MOffert
Cells(Dligne, 17) = MVerse
Cells(Dligne, 18) = "Annulé"
Else
' ici le traitement si réponse négative
' ... retour userform
End If
End Sub
Private Sub UserForm_Initialize()
Sheets("Tables").Select
Dim c As Variant
Dim c2 As Variant
Dim c3 As Variant
' Combobox avec liste des noms et prenoms des joueurs
For Each c In Range("G4:G" & [G200].End(xlUp).Row)
Me.ComboBox1.AddItem c
Next c
' combobox avec list mode paiement
For Each c2 In Range("L34:L" & [L35].End(xlUp).Row + 1)
Me.ComboBox2.AddItem c2
Next c2
' combobox avec list observation
For Each c3 In Range("J21:J" & [J25].End(xlUp).Row + 1)
Me.ComboBox3.AddItem c3
Next c3
Sheets("Caisse Journalière").Select
End Sub
Private Sub CommandButton1_Click()
' Initialise les variables
Dim Dligne As Integer
Dim NPiece As String
Dim NomPrenom As String
Dim Observation As String
Dim DateJ As Date
Dim NChq As String
Dim ModeP As String
Dim Mbillard As Integer
Dim MBar As Integer
Dim MCours As Integer
Dim MRepas As Integer
Dim MOffert As Integer
Dim MVerse As Integer
Dim RestePayer As Integer
' valeurs initiales
DateJ = Date
NPiece = ""
NomPrenom = ""
Observation = ""
MBar = 0
NChq = ""
ModeP = ""
Mbillard = 0
MCours = 0
MRepas = 0
MOffert = 0
MVerse = 0
' selectionne la feuille
Sheets("Caisse Journalière").Select
' range les valeurs dans cellules
' Date de la consommation indiqué sur le cahier journalier
If Not IsDate(Me.TextBox2) Then
MsgBox "Format de date saisie incorrect !", vbOKOnly + vbCritical, "Erreur de saisie"
Exit Sub
Else
DateJ = Me.TextBox2.Value
If DateJ > Date Then
MsgBox "Date supérieure à date du jour", vbOKOnly + vbCritical, "Erreur de saisie"
Me.TextBox2 = ""
Exit Sub
End If
End If
' Identification cahier saisie comptable par N° Pièce
If Me.TextBox1 <> "" Then
NPiece = Me.TextBox1.Value
Else
MsgBox "Saisie N° Pièce Obligatoire", vbOKOnly + vbCritical, "Erreur de saisie"
Exit Sub
End If
' Identification du membre
If Me.ComboBox1 <> "" Then
NomPrenom = Me.ComboBox1
Else
MsgBox "Nom du membre Obligatoire", vbOKOnly + vbCritical, "Erreur de saisie"
Exit Sub
End If
' Identification du moment
If Me.ComboBox3 <> "" Then
Observation = Me.ComboBox3
Else
MsgBox "Observation Obligatoire", vbOKOnly + vbCritical, "Erreur de saisie"
Exit Sub
End If
If Me.TextBox4 <> "" Then
MBar = Me.TextBox4.Value
End If
If Me.TextBox11 <> "" Then
NChq = Me.TextBox11.Value
End If
ModeP = Me.ComboBox2
If Me.TextBox5 <> "" Then
Mbillard = Me.TextBox5.Value
End If
If Me.TextBox7 <> "" Then
MCours = Me.TextBox7.Value
End If
If Me.TextBox6 <> "" Then
MRepas = Me.TextBox6.Value
End If
If Me.TextBox8 <> "" Then
MOffert = Me.TextBox8.Value
End If
If Me.TextBox9 <> "" Then
MVerse = Me.TextBox9.Value
End If
RestePayer = ((MBar + Mbillard + MCours + MRepas) - MOffert) - MVerse
Label15 = RestePayer
If MBar < 0 Or Mbillard < 0 Or MCours < 0 Or MRepas < 0 Then
: Beep ' MsgBox "Les valeurs négatives sont iterdites", vbOKOnly + vbCritical, "Erreur de saisie"
End If
' Derniere vide du fichier
Dligne = Range("E9500").End(xlUp).Row + 1
If (MBar + Mbillard + MCours + MRepas) <> 0 Then
Cells(Dligne, 5) = NPiece
Cells(Dligne, 6) = NomPrenom
Cells(Dligne, 7) = Observation
Cells(Dligne, 8) = DateJ
Cells(Dligne, 9) = NChq
Cells(Dligne, 10) = ModeP
Cells(Dligne, 11) = Mbillard
Cells(Dligne, 12) = MBar
Cells(Dligne, 13) = MCours
Cells(Dligne, 14) = MRepas
Cells(Dligne, 15) = MOffert
Cells(Dligne, 17) = MVerse
'
Label15 = RestePayer
If RestePayer > 0 Then
MsgBox "La somme restante à payer est de : " & RestePayer & " €", vbOKOnly + vbInformation, "Information"
End If
' saisie historisée si une somme est négative
' Historiquegestion
If Mbillard < 0 Or MBar < 0 Or MCours < 0 Or MRepas < 0 Or MOffert < 0 Or MVerse < 0 Then
Sheets("Historiquegestion").Select
Dligne = Range("E9500").End(xlUp).Row + 1
Cells(Dligne, 3) = Date
Cells(Dligne, 4) = "Saisie avec valeur négative"
Cells(Dligne, 5) = NPiece
Cells(Dligne, 6) = NomPrenom
Cells(Dligne, 7) = Observation
Cells(Dligne, 8) = DateJ
Cells(Dligne, 9) = NChq
Cells(Dligne, 10) = ModeP
Cells(Dligne, 11) = Mbillard
Cells(Dligne, 12) = MBar
Cells(Dligne, 13) = MCours
Cells(Dligne, 14) = MRepas
Cells(Dligne, 15) = MOffert
Cells(Dligne, 17) = MVerse
Sheets("Caisse Journalière").Select
End If
Else
MsgBox "Saisie incorrecte", vbOKOnly + vbCritical, "Erreur de saisie"
End If
End SubBonjour,
Encore une usine à gaz qui gagnerait à être simplifiée... !
Si tu disais simplement sur quelle ligne est l'erreur, on gagnera du temps... !
Bonjour
L'erreur est sur le ligne Load userform1 dans la macro saisieCJ.
Pour une usine à gaz, je ne dis pas non, et j'ai répété certaines lignes de code car je ne connais pas encore le VBA comme savoir si je peux créer une fonction avec des passages de paramètres etc.. ce n'est qu'un début et je souhaite apprendre.
merci pour l'aide
Note que l'utilisation de Load immédiatement suivie de Show est tout à fait superflue, le charagement est opéré automatiquement, Show suffit !
L'erreur aurait simplement alors apparue sur la ligne Show, ce qui indique que le Userform ne peut s'afficher et qu'il faut chercher l'erreur dans Initialize (proc. qui s'exécute avant affichage).
Ça tombe bien, elle est relativement courte (contrairement à d'autres !) ce qui ne l'empêche de charrier des éléments qui mériteraient d'être éliminés :
- commence évidemment par un Select (quand donc apprendra-t-on dès la première leçon que sélectionner quand ce n'est pas la fin en soi est une action inutile et parasite, qui ne fait qu'occuper du temps pour rien !
) - par contre on apprend bien partout que toutes les variables se déclarent toujours en tête de procédure avant tou code exécutable ! Il serait bon que tu l'assimiles une bonne fois, définitivement.
- tu es aussi très prodigue avec les variables ! 3 quand une suffit ! La même pouvait être utilisée tour à tour... Il faut réfléchir, toujours inutile de charger la mémoire quand il n'en est pas besoin.
Range("L34:L" & [L35].End(xlUp).Row + 1)Enfin, il me semble que tu devrais te pencher sur cette ligne, la définition me paraît douteuse...
Et au lieu de "sélecter" à tour de bras, tu ferais mieux de qualifier tes expressions, ce serait plus rapide et plus sûr. Et si tu souhaites apprendre c'est entre autres par là qu'il faut commencer : bannir tout Select, Selection, Activate... du code et doter toute expression de qualificateur d'objet (jamais de Range, Cells, etc. sans référence à la feuille à laquelle elles appartiennent)...
Souhaitons que ce soit bien le bon Initialize...
Cordialement.
Bonjour
Effectivement si j'enlève le Load, l'erreur se fait sur la ligne show
Mes variables sont au début de chaque procédure
cette ligne reprendre 2 lignes dans une table, une feuille où toutes les combobox ont leur intitulés, entête etc..
Range("L34:L" & [L35].End(xlUp).Row + 1)A chaque fois que je me rends dans une feuille, je l'a sélectionne, ce qui me parait logique
et les range, cells sont utilisés sur la bonne feuille.
Je ne comprends pas.
Pour l'initialize, d'après ce que j'ai compris est pour chaque Userform et là c'est le cas.
Par contre, ce qui me surprends et que l'initialize a la même référence Userform et non Userform1 ou 2, d'ailleurs si je mets Private Sub UserForm1_Initialize(), l'userform1 s'affiche mais les combobox restent vide car plus reconnus.
Private Sub UserForm_Initialize()Avant de réaliser l'userform2, l'userform1 fonctionnait très bien. Donc j'ai réalisé l'userform2, qui fonctionne aussi mais qui génère l'erreur sur l'userform1 que j'ai décris et c'est cela que j'aimerais comprendre.
Ce qui me surprends aussi, c'est la définition automatique des combobox,
Userform1 = combobox1
Userform2 = combobox1
c'est pour cela que j'ai mis
UserForm2.ComboBox1.AddItem c10L'userform2 me servant simplement à rendre visible ou pas telle ou telle feuille suivant l'accès, je me rends dans la feuil Menu.
merci
Mes variables sont au début de chaque procédure
Ce n'était pas le cas dans celle que j'ai examinée !
cette ligne reprendre 2 lignes dans une table, une feuille où toutes les combobox ont leur intitulés, entête etc..
Ça, moi ça ne m'évoque rien... mais tu ne dis pas la valeur renvoyée par ta ligne... !
A chaque fois que je me rends dans une feuille, je l'a sélectionne, ce qui me parait logique
Rien de plus illogique !
Là tu lui colles simplement un boulet au pied !
et les range, cells sont utilisés sur la bonne feuille.
Jusqu'au jour où ce ne sera plus le cas...
ce qui me surprends et que l'initialize a la même référence Userform et non Userform1 ou 2, d'ailleurs si je mets Private Sub UserForm1_Initialize(), l'userform1 s'affiche mais les combobox restent vide car plus reconnus.
Là c'est ta procédure Initialize qui n'est plus reconnue comme telle !
Tu as zappé les cours de bases en la matière !!
Note-toi bien quelque part que si on veut être sûr que tout fonctionne, on ne tape jamais les déclarations de procédures d'évènements, on laisse VBA les inscrire, que ce soit dans les feuilles ou dans les Userforms. On sélectionne l'objet dans la liste déroulante gauche (ce qui produit l'inscription de l'évènement par défaut), puis s'il y a lieu, dans la liste droite on sélectionne un autre évènement...
Dans les modules de Userform, tu peux utiliser Me pour désigner le Userform, sans ambiguïté. Me représente l'objet auquel le module est dédié. C'est la même chose pour les modules de feuilles de calcul.
Et as-tu fait une exécution pas à pas, pour voir où précisément se produisait l'erreur...
bonjour
Pour les variables : Bon, je dois te dire, qu'il y a bien longtemps je développais mais non orienté objet, donc pour moi c'est nouveau.
Je déclare les variables dans les procédures ou j'en ai besoin, donc d'après ce que tu me dit je dois le faire bien avant.
Pour la table, une feuille où je dispose d'un ensemble de données pour lesquelles j'utilise celles ci pour remplir par exemple un tableau, définir des entêtes de colonne, c'est paramétrable.
Comment dire à VBA de prendre des données sans lui dire où aller chercher ? ex:
je sélectionne la feuille
déclare les variables
traite les variables
et donne un résultat
Je n'arrive pas à comprendre comment un langage de programmation peux aller chercher des données sans lui dire où.
Là, je suis larguer, ayant réalisé des programmes en, basic, clipper, python, batch je suis surpris de ce que tu me dis : J'ai besoin d'explications et surtout d'une correction qui va me permettre de résoudre mon problème.
Existe t-il un schéma type d'utilisation de deux userform. et toutes les procédures ont été crées par visual basic lors de la constitution de l'userform.
Si la procédure initailze n'est pas reconnue ,pourquoi ?
Pour le debug visual, y a t-il un mode d'exécution pas à pas auto sous forme de rapport ?
merci
Comment dire à VBA de prendre des données sans lui dire où aller chercher ?
Tout a un nom !
Ce que tu ne comprends pas, c'est que chaque fois que tu tapes Select ou Activate, tu fais réaliser une action, là tu lui indiques bien la feuille, mais une fois ! Quand tu lui dis ensuite : Range... VBA ne sait pas où est ce Range ! Ne lui disant rien il va l'affecter à la feuille active, qu'il va chercher !
Alors que si tu lui dis Worksheets(x).Range... pas d'hésitation, il y va direct
Ou mieux :
With ActiveSheet
.Range...
Là il met la feuille en mémoire, et toute expression précédée d'un point y est rattachée, et il y accède encore plus rapidement...
Avec les Select, non seulement tu fais un action supplémentaire parasite, mais tu n'es jamais assuré que lors de modification ultérieure, la feuille supposée être active sera bien toujours la feuille active ! Tu cherches alors l'erreur, ou pire, pas d'erreur mais travail sur une autre feuille que celle prévue !
Pour le pas à pas, tu ouvres la boîte de dialogue macro, tu sélectionnes ta procédure de lancement (celle où apparaît l'erreur), et tu cliques sur pas à pas détaillé. pour avancer ensuite ligne par ligne, tu actionnes F8.
Bonjour
Bon ok je comprends, je vais réécrire avec la bonne syntaxe et faire le débug.
Je poste les codes et vois ensuite, merci
Ce qui ne s'appréhende pas du premier coup (il m'a fallu un certain temps !
On peut l'omettre le plus souvent, elle est implicite, et si on ne travaille qu'avec un classeur, l'omission de Workbooks ne pose pas problème, mais aux niveaux suivants on n'a jamais qu'un seul objet de l'espèce...
Bonjour
Je fais actuellement les modifications et j'ai trouvé pourquoi, la feuil tables était non visible donc non accessible.
Sub saisieCJ()
'
' SaisieCJ Macro
'
Sheets("Tables").Visible = True
userform1.Show
'
End SubMerci pour le temps passé et tes explications.
Je fais actuellement les modifications et j'ai trouvé pourquoi, la feuil tables était non visible donc non accessible.
Illustration parfaite !
Feuille non visible, c'est avec Select que tu provoques une erreur !
Sans Select pas d'erreur.
On travaille parfaitement avec une feuille masquée, tant que l'on n'accomplit pas d'opération qui exige qu'elle soit visible...
Ce peut même être une sécurité...
Salut
Oui et la programmation devient plus simple et le code à lire.