Manipulation des UserForm avec des feuilles cachées

Résolu
mijean94 Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   -  
mijean94 Messages postés 415 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   160
 
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 415 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonjour ThauTheme, Bonjour le forum,

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

Cordialement
0