VBA : contrôler si une feuille existe

Phillip

XLDnaute Occasionnel
Bonjour,

Je sais que ce sujet a été maintes fois abordé et qu'il existe plusieurs solutions mais pour moi cela ne marche pas. Peut être est-ce du à la philosophie de mon développement et le parti pris, je ne sais pas...

Voilà : j'ai un tableau logigramme, et j'aimerais faire disparaître certains colonnes et/ou certaines lignes en fonction d'un choix dans une liste déroulante. J'ai réussi à faire ça avec une combo box des case1....n et en utilisant columns.hidden=true par exemple.

Je veux évidemment que mon case "voir tout" restitue...tout !

Sauf que...dans un de mes choix (5) il faut que je fasse disparaître, non pas des lignes ou des colonnes entières, mais une zone. J'ai essayé la solution de copier cette zone dans une nouvelle feuille, remettre en forme la partie effacée (format, remplissage, etc...). Jusque là, tout va bien.

Mais, comme je veux qu'à chaque choix je reparte de la solution "entière, je recolle ce que j'ai copié dans la feuille séparée dans la zone où je l'avais précédemment effacée.

Et là, je vérifie si la feuille contenant ce que je veux sauvegardé existe et j'y arrive pas, car excel veut me la recréer systématiquement et me dit qu'il ne peut pas donner le même nom à une feuille...

Je suis en train de me demander s'il n'existe tout simplement pas un moyen de "cacher" une zone (sans la détruire) sans que ça soit une ligne ou une colonne entière, sinon, comment faire mon truc ?

je vous joins mon fichier, le code est dans la feuille, mon problème est lorsque je choisis le case 5.

merci de vos lumières, mêmes minimes !

Cordialement
 

Pièces jointes

  • choix.xlsm
    231.6 KB · Affichages: 14

sousou

XLDnaute Barbatruc
Bonjour
Je te propose ici une solution sous la forme d'array que tu dois remplir dans l'instruction select du module3
J'ai simplement fait des test avec le choix 5
J'ai ajouter une nouvelle combobox, pour ne pas toucher à ce que tu avais fait
Deux array pr choix, tlg et tcol
Celles-ci sont rempli par couple de deux valeurs
exemple tlg(1,20,25,30, 35,40) veut dire ligne de 1 à 25 et de 25 à 30 et de 35 à 40 sont visibles
idem pôur les colonnes avec tcol
 

Pièces jointes

  • choix.xlsm
    239.8 KB · Affichages: 10

Phillip

XLDnaute Occasionnel
Bonjour Sousou,

Merci pour ce dev rapide et subtil ! Je n'aurais pas pensé à utiliser les arrays (Que j'avoue mal maîtriser). Une question et une remarque..

Q : Comment le combobox peut appeller la macro module3 ??
Remarque : Ca ne résoud pas mon problème dans le cas 5.
Je voudrais que mon cas 3 affiche
1026202


Je devrais pouvoir le régler avec les coordonnées ligne et colonnes... Mais, je voudrais que mon cas 4 affiche ça (que la partie haute du cas 3 - encore une fois, en jouant sur les lignes, je devrais m'en sortir...

1026201


Et surtout que mon cas 5 affiche la même chose que le cas 4 ci-dessus, MAIS en remplaçant le pavé bleu "espagnol ou italien" par le pavé orange "espagnol ou allemand japonais barré" ; d'où mon idée initiale de copier coller cette zone dans une autre feuille pour la sauvegarder...

Merci encore de ton aide, si possible...

Cordialement

Phillip
 

sousou

XLDnaute Barbatruc
J'ai essayer de comprendre quelles zone tu veux afficher, mais je ne crois pas que j'ai tout saisie,

J'appel la macro affichedu module 3 avec combobox3 change dans la feuille2
 

Pièces jointes

  • choix.xlsm
    239.9 KB · Affichages: 0

Phillip

XLDnaute Occasionnel
Bonjour sousou,

désolé, je n'étais pas là hier et je ne pouvais pas tester. j'ai corrigé les array pour faire exactement ce que je veux e j'ai testé. Tout va bien, sauf mon problème initial :

C'est le case 5 affiché, le case 6 dans la macro 3. j'ai mis des commentaires dans le code sur ce que je veux faire. J'ai besoin que le bloc du bas orange, (espagnol, allemand japonais barré) "remplace" le bloc du haut bleu (espagnol italien) en gardant son formatage (orange...)

C'est pour cela que j'avais imaginé copier le bloc bleu dans une nouvelle feuille pour le sauvegarder, puis le recoller à sa place pour le case 5 par exemple, ou le case 8...

On va y arriver !

merci

Cordialement

Phillip
 

Pièces jointes

  • choix-08032019 .xlsm
    219.5 KB · Affichages: 7

Phillip

XLDnaute Occasionnel
eh oui, désolé...pas facile...je te joins un fichier excel tout simple avec un onglet par case (ceux de la macro) de ce que je veux vraiment obtenir visuellement.
C'est le case 6 qui me pose problème avec ce bloc orange qui doit "remonter" à la place du bloc "bleu" du case 5. (mais sans que le case 5 soit détruit !)

merci encore !

Cordialement

Phillip
 

Pièces jointes

  • test.xlsm
    32.2 KB · Affichages: 2

youky(BJ)

XLDnaute Barbatruc
Bonjour à Tous,
Je suis pas sur d'avoir compris mais voici comme je ferais pour le début de la macro.
Bruno
VB:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
    If Sheets(i).Name <> "temporaire" Then
Rows("1:100").Hidden = False
Columns("A:BB").Hidden = False
Sheets(i).Range("Q7:AA22").Copy
On Error Resume Next 'on gère si error
Sheets("temporaire").Activate 'on tente direct d'activer
If Err <> 0 Then 'si error on créé tempo
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "temporaire"
Application.CutCopyMode = True
'ActiveWindow.SelectedSheets.Visible = True
End If
ActiveSheet.Paste   ''''''''''à voir à mettre le Next en dessus
Next i
On Error GoTo 0 'on supprime la gestion d'error
'''''et la suite de la macro
 

eriiic

XLDnaute Barbatruc
Bonjour,

pas sûr d'avoir tout suivi...
Plutôt que de t'embêter à sauvegarder des zones pourquoi tu ne pars pas d'une feuille Modèle (cachée) ?
Ca te fait un modèle vierge de départ en la copiant. Et si tu as effacé des zones soit tu repars du modèle complet, soit tu récupères la zone qui t'intéresse dans le modèle.

Sinon, créer une feuille si elle n'existe pas :
VB:
On Error Resume Next
Set MaFeuille = ActiveWorkbook.Worksheets("pilotage")
If Err.Number <> 0 Then
  ActiveWorkbook.Worksheets.Add  After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
  ActiveSheet.Name = "pilotage"
  Set MaFeuille = ActiveSheet
  Err.Clear
End If
eric
 

sousou

XLDnaute Barbatruc
Re
Bien! Dans ce cas, j'ai fait comme tu l'as suggéré ,sauvegarde de la zone à faire disparaitre dans une feuille (tampon) avec paramètre de récupération save(), copie de la zone à mettre en place , et remise en place avec la procédure récup()
donc une nouvelle procédure zoneremplace() qui va précéder la procédure affiche voir case is
zoneremplace(ligne de départ de la zone à copier,ligne de fin...,colonne de départ..., colonne de fin..,adresse du coin gauche de la destination)
Cà devrais marcher dans beaucoup de cas, reste un truc : il faut que la zone à copier soit = ou plus grande que la zone destination, , si non il va falloir ajouter quelque chose, mais avant de poursuivre il faut voir ce que tu en pense.
J'ai pas pris le temps de mettre des explications dans le code
 

Pièces jointes

  • choix.xlsm
    225.2 KB · Affichages: 3
Haut Bas