Activesheet

  • Auteur de la discussion Mercure40
  • Date de début

Mercure40

Nouveau membre
Bonjour à tous,
J’ai un petit problème ! je veux faire une validation de données d’après une liste mais je voudrais pouvoir l’appliquer aux 12 feuilles de mon classeur sans avoir à dupliquer 12 fois la macro. Je ne parviens pas à trouver la bonne commande qui s’appliquerait à la feuille active et non au mois comme ci-dessous..
Merci de votre aide.
Voici la macro enregistrée.

[cpp]Sub Macro1()
' Macro1 Macro
activeSheets.Select
Range("Février[Type]").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
Operator:=xlBetween, Formula1:="=type"
.IgnoreBlank = True
.InCellDropdown = True
.ErrorTitle = ""
.ErrorMessage = "eeeee"
.ShowInput = True
.ShowError = True
End With
Range("D71").Select
End Sub[/cpp]
 

aurelie1985

Nouveau membre
Met ton code entre balise code , ça sera plus lisible ( tu edites > +d'options> code ) , je me permet de te le dire car je sais qu'on va te le demander ^^ .

Pour ton problème , je pense que tu devrais regarder du coté des fonctions VBA , tu peut créer ta propre fonction qui va répondre a tes besoins , mais je ne suis pas certaine donc attend des gens plus experimentés . ( F1 sur excel ou recherche sur google ) .


Bonne chance .

Aurélie .
 

Mercure40

Nouveau membre


Merci Aurélie
j'ai déjà, avant d'écrire sur ce forum essayé diversses solutions aide excel ou sur différents sites de formation excel, mais je n'ai pas trouvé.
merci encore
 

zeb

Modérateur
Salut,

Merci Aurélie de faire la police pour moi. En fait, moi, je ne le fais que pour vous ;)

Mais si, Mercure tu as trouvé. Au moins le bon site :)

---------------------

Alors, tout d'abord, il faut arrêter de se fier aux objets actifs.
Qu'est-ce qui te garantit que la cellule, la feuille, le classeur actif vont le rester, actifs ?

Ensuite, tu donnes un nom à une cellule - Février[Type]. C'est bien mais si tes feuilles ont des cellules nommées différemment, il va failloir faire autrement.
Par exemple, utiliser leurs coordonnées, avec Range() ou Cells().

Pour finir, pourquoi cette sélection de D71, à la fin ?
Code:
With mafeuille.Cells(3, 4).Validation
    .Delete
    .Add ...
    ...
End With

Eh, évidemment, il reste à fixer mafeuille.
Comme ça, par exemple :
Code:
For Each mafeuille In Worksheets
    ...
Next
 

Mercure40

Nouveau membre

Bonjour à tous et merci
j'ai testé la solution que j'avais posté mais je ne la vois pas je la réédite

[cpp]
Sub Validation_type()
'
Range("d3:d100").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
Operator:=xlBetween, Formula1:="=typeV"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("d5").Select
End Sub

[/cpp]
Le range à la fin cest pour me repositionner dans la feuile et sotir de la sélection. Range("d71").Select, était une erreur. merci encore et à bientot.
 

zeb

Modérateur
Un, arrête de faire des sélections inutiles.
Deux, et ce que je te propose, non, ce n'est pas intéressant ?
 

Mercure40

Nouveau membre
Excuse moi de t'avoir froissé, mais je comprends pas ton code je ne suis qu'un novice en vba j'essaye simplement de comprendre et de transformer des macros enregistrées.
 

zeb

Modérateur
Fais attention à toi, je suis TRES susceptible.
Mais je ne suis ni méchant, ni impatient.
Alors je vais t'expliquer. Et si tu le demandes, continuer à te proposer d'autres choses. Et à les expliquer..... :ange:

L'enregistreur fait ce qu'il peut, soit peu. Et ce qu'il enregistre, ce sont des manipulation à la main, qu'il programme digne de ce nom ne doit pas toujours faire. Par exemples, sélectionner quoi que ce soit avant de s'en servir est inutile, voire consommateur de ressource ; se servir du presse-papier pour retenir des informations uniquement utile au programme est strictement à prohiber quand on programme, etc.

Donc on enregistre :
Code:
Range("A1").Select
Selection.Copy
Range("B1").Select
Paste
Mais on corrige comme ceci, pour retirer toute sélection et toute manipulation par le presse-papier inutiles :
Code:
Range("A1").Copy Destination:=Range("B1")
Pour moi, c'est tellement plus clair et plus facile !

----------------

Ce que tu proposes est la solution ?
Parce que tu n'expliques pas grand' chose, toi ;)
 

Mercure40

Nouveau membre

Merci Zeb pour tes explications
Nous partons chez nos enfants pour une huitaine mais rentrant je mettrais certainement à contribution, si tu me le permet,
Bonne soirée à bientôt
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 098
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut