Manipulation des UserForm avec des feuilles cachées [Résolu/Fermé]

Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
- - Dernière réponse : mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
- 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 : http://www.cjoint.com/c/FDjwevYUSYt

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

Merci pour vos réponses

Cordialement
Afficher la suite 

1 réponse

Messages postés
4611
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
9 décembre 2019
118
0
Merci
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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 -
Bonjour ThauTheme, Bonjour le forum,

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

Cordialement