Autres Feuille masquer dans macro

gh4

XLDnaute Occasionnel
bonjour a tous,
j'ai des feuilles de données qui sont masquées par
sheets("feuil1").visible=false la macro plante lorsque
sheets("feuil1").select
Suis je obligé de rendre la feuil1 visible par true a chaque fois que ma macro veut y acceder et apres False pour la remasquer
ou existe t il une autre methode moins contraignante. sachant que plusieurs utilisateurs utilise le prog et que la feuil1 ne doit
subir de modif sans passer par la macro
par avance merci
cdt
 
Solution
Re,
J'ai remplacé :
VB:
Set rRange = .Range([c3], [c4000])
par
Set rRange = .Range("c3", "c4000")

TextBox1 = Cells(ligne, 2)
par
TextBox1 = .Cells(ligne, 2)
et renommer la feuil3 en Test
Et vous pouvez aussi, si vous le voulez supprimer : Sheets("test").Select qui ne sert à rien.

Est ce que cela fait ce que vous voulez ?

mapomme

XLDnaute Barbatruc
Supporter XLD
Suis je obligé de rendre la feuil1 visible par true a chaque fois que ma macro veut y acceder et apres False pour la remasquer
Bonjour @gh4 :)

Pour sélectionner une feuille masquée, il faut la rendre visible puis la re-masquer après.

Mais, si la macro est bien écrite, il est rarissime qu'une macro soit obligée de sélectionner une feuille pour faire des traitements sur les données de la feuille (que ce soit en lecture, réorganisation (tri, ôter doublons, ...), écriture, copie et autres.
 

gh4

XLDnaute Occasionnel
Bonjour @gh4 :)

Pour sélectionner une feuille masquée, il faut la rendre visible puis la re-masquer après.

Mais, si la macro est bien écrite, il est rarissime qu'une macro soit obligée de sélectionner une feuille pour faire des traitements sur les données de la feuille (que ce soit en lecture, réorganisation (tri, ôter doublons, ...), écriture, copie et autres.
un exemple
si ma feuille "liste" est masquée comment vous re-ecrireriez cette fonction

Private Sub UserForm_Initialize()

Dim J As Long
ComboBox1.Clear

Set ws = Sheets("LISTE")

With Me.ComboBox1

For J = 3 To ws.Range("c" & Rows.Count).End(xlUp).Row
.AddItem ws.Range("c" & J)
Next J

End With


End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Gh4, Mapomme,
Dans l'état votre macro n'a aucun Select, et donc marche correctement que la feuille liste soit masquée ou non.
En PJ un ex avec la feuille masquée et invisible. ( xlsheetveryhidden )
Donc si vous avez une erreur, elle vient d'autre part que de cette macro.
 

Pièces jointes

  • Masquée.xlsm
    19.2 KB · Affichages: 0

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

si ma feuille "liste" est masquée comment vous re-ecrireriez cette fonction

Le code suivant fonctionne que la feuille Liste soit masquée ou non. Votre code fonctionne aussi que la feuille Liste soit masquée ou non.
Joignez votre fichier, on verra plus clair...
VB:
Private Sub UserForm_Initialize()
Dim i As Long
   With Sheets("LISTE")
      ComboBox1.Clear
      For i = 3 To .Cells(Rows.Count, "c").End(xlUp).Row: ComboBox1.AddItem .Cells(i, "c"): Next
   End With
End Sub
 

gh4

XLDnaute Occasionnel
Re,



Le code suivant fonctionne que la feuille Liste soit masquée ou non. Votre code fonctionne aussi que la feuille Liste soit masquée ou non.
Joignez votre fichier, on verra plus clair...
VB:
Private Sub UserForm_Initialize()
Dim i As Long
   With Sheets("LISTE")
      ComboBox1.Clear
      For i = 3 To .Cells(Rows.Count, "c").End(xlUp).Row: ComboBox1.AddItem .Cells(i, "c"): Next
   End With
End Sub
 

gh4

XLDnaute Occasionnel
j'ai fait ce que vous m'avez dit mais cela bug car dans la macro il ne trouve jamais vI=""
avec with sheets("liste")

Private Sub ComboBox1_Change()


Dim vI As Variant


If ComboBox1 = "" Then GoTo 1000

With Sheets("LISTE")
Set rRange = Range([c3], [c4000])
For Each vI In rRange
If ComboBox1.Text = vI Then

Exit For
End If
Next vI

TextBox1 = Cells(ligne, 2)

1000
End With

End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Ce que vous semblez souhaiter:
Votre code recherche le texte affiché de la ComboBox1 dans la plage c3 à c4000.
S'il trouve le texte dans une cellule de la plage, il quitte la boucle et affecte à TextBox1 le texte de la cellule de la ligne "ligne" et de la colonne 2 (colonne B).

Question : à quelle moment définissez-vous la valeur de la variable ligne ?
A vue de nez jamais donc, ligne contient la valeur 0.

Une étiquette de branchement textuelle dans un code VBA se termine par le signe de ponctuation ":" (deux points).
Vous pouvez par exemple écrire (je préfère les étiquettes textuelles):
If ComboBox1 = "" Then GoTo Vide
...
...
Vide:
...
...

Le mieux étant ce qu'a proposé @vgendron : If ComboBox1 = "" Then Exit Sub
 
Dernière édition:

gh4

XLDnaute Occasionnel
ok pour exit sub a place go to
mon souci n'est pas la
ma macro marchait tres bien avec sheets("liste").select
mais comme je voulais cacher la feuille liste suite a conseil de Vgendron
j'ai caché liste et remplacé sheets("liste").select par with sheets("liste")
maintenant textbox1 reste vide comme si il ne sélectionnait jamais la feuille liste pour trouvé VI=combobox1

Private Sub ComboBox1_Change()
Dim ligne As Long
Dim vI As Variant

If ComboBox1 = "" Then Exit Sub
With Sheets("LISTE")
Set rRange = Range([c3], [c4000])
For Each vI In rRange
If ComboBox1.Text = vI Then
'MsgBox (vI.Row) 'affiche la ligne trouvée

ligne = (vI.Row)
Exit For
End If
Next vI

TextBox1 = Cells(ligne, 2)
end with
end sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Quand vous écrivez ceci :
VB:
With Sheets("LISTE")
Set rRange = Range([c3], [c4000])
Le rrange est référencé à la page courante.
Pour le référencé à la page du With il faut mettre un point devant :
Code:
With Sheets("LISTE")
Set rRange = .Range([c3], [c4000])
Qui indique au VBA qu'il doit utiliser la déclaration du With.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 823
dernier inscrit
ben talha redouane