Manipulation des UserForm avec des feuilles cachées

Résolu/Fermé
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 10 avril 2016 à 00:07
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 10 avril 2016 à 17:04
Bonjour,

Peut-on faire appel à un UserForm, qui récupère des données dans une feuille cachée.

Mon code fonctionne bien si ma feuille est visible mais il y a une erreur
« La méthode select de la classe Worksheet a échoué »
si la feuille est cachée !!!

Voici un fichier d’exemple : https://www.cjoint.com/c/FDjwevYUSYt

Y a-t-il une solution, une piste de recherche ?

Merci pour vos réponses

Cordialement

1 réponse

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 10/04/2016 à 01:36
Bonsoir Mijean, bonsoir le forum,

Tu n'as pas besoin de sélectionner un onglet pour y placer des données tant que tu ne sélectionnes pas de cellule dans cet onglet. Il te suffit juste de le spécifier. Ce que tu a fait dans ton code. Les lignes Sheets("BD").Select et Sheets("FA").Select sont donc inutiles. Ton code devient :

Private Sub B_validation_Click()
  '--- Transfert Formulaire dans BD
  
Dim FA As String
 Application.ScreenUpdating = False 'Gèle l'écran
 FA = ActiveSheet.Name 'Conserve le nom de la feuille active dans une variable
 'Sheets("BD").Select 'Sélectionne la feuille sur laquelle tu veux travailler
'Tes opérations
  f.Unprotect
   f.Cells(ligne, 2) = Application.Proper(Me!nom)
   f.Cells(ligne, 3) = Me.Marié  'OuiNon(Me.Marié)
   f.Cells(ligne, 4) = CVDate(Me.date_naissance)
   f.Cells(ligne, 5) = Me.Service
   f.Cells(ligne, 6) = Me.Ville
   f.Cells(ligne, 7) = CDbl(Me.Salaire)
   '-- Civilité
   temp = ""
   For Each c In Me.Civilité.Controls
     If c.Value = True Then
       temp = c.Caption
     End If
   Next c
   f.Cells(ligne, "a") = temp
   f.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
   'Sheets(FA).Select 'Reviens à la feuille initiale ni vu ni connu !
End Sub


En revanche, quand tu déclares tes variables, il te faut les "typer" sinon elle prennent le type Variant par défaut et c'est les plus gourmand en mémoire...
Dim ligne, f devient :

Dim ligne As Integer 'ou Long si gros tableau de plus de 32 767 lignes
Dim f As Worksheet

que l'on peut aussi écrire :

Dim ligne As Integer, f As worksheet


À plus,
ThauTheme
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
10 avril 2016 à 17:04
Bonjour ThauTheme, Bonjour le forum,

Merci pour cet réponse qui fonctionne nickel.
Je vais de ce pas l'appliquer à mon programme.

Cordialement
0