Manipulation des UserForm avec des feuilles cachées

Résolu
mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   -  
mijean94 Messages postés 413 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

  1. ThauTheme Messages postés 1564 Statut Membre 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
    1. mijean94 Messages postés 413 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