Macro excel interrogeant un tableau par le nom de la colonne

Macro excel interrogeant un tableau par le nom de la colonne - VB/VBA/VBS - Programmation

Marsh Posté le 08-10-2009 à 10:23:25    

Bonjour à tous,
 
   Je suis en train de me remettre doucement à faire des maros excel, et je peine sur un détail qui me chagrine.
 
J'ai un tableau avec par exemple 4 colonnes ayant pour titre "Titre Album", "Nom Artiste", "Durée". Aujourd'hui ma macro fait différentes requètes sur ce tableau, mais j'interroge mes cellules à chaque fois par la position ligne/colonne de la cellule (ex : Cell (2,1) si je veux récupérer le titre du premier Album dans la liste. Là où ça pose problème c'est qu'on peut très bien imaginer dans ce tableau rajouter une colonne "Année" par exemple, en l'insérant entre le nom de l'artiste et la durée, et là mes cellules étant décalées, plus rien ne fonctionne...  [:jsuistropcon]  
 

|Titre Album |Nom Artiste  |Durée   |

|Album 1      |Artiste 1     |Durée 1 |
|Album 2      |Artiste 2     |Durée 2 |
 
Pourrait devenir plus tard :
 

|Titre Album |Nom Artiste |Année     |Durée   |

|Album 1      |Artiste 1     |Année 1  |Durée 1|
|Album 2      |Artiste 2     |Année 2  |Durée 2|
 
Pour que ma macro soit un minimum pérenne, et survive aux modifications éventuelles de ce tableau, je cherche à savoir s'il existe un méthode qui permettrai de rendre ma macro indépendante des ajouts/suppressions de colonnes. Je pensais bien à faire une recherche à chaque fois sur le titre de la colonne et récupérer ainsi le numéro de la colonne en question pour poursuivre ma requète.
 
Existe-t-il une autre solution ? Ou est-ce le seul moyen de procéder ?
 
Merci d'avance pour votre aide !  :hello:


Message édité par Zboss le 08-10-2009 à 10:26:46

---------------
Mario Kart for Ever
Reply

Marsh Posté le 08-10-2009 à 10:23:25   

Reply

Marsh Posté le 08-10-2009 à 15:31:19    

Plein de solutions !
Utiliser d'abord "Rechercheh()" pour chercher dans quelle colonne se trouve par exemple "Durée" si c'est l'item recherché, puis utiliser le numéro de cette colonne pour aller chercher la donnée.
Peut-être plus élégant, créer un tableau croisé dynamique et utiliser la fonction "LIRETABLEAUCROISEDYNAMIQUE" (je ne sais plus la syntaxe, mais il suffit de créer un TCD et essayer)...
Si tu as des données comme cela bien structurée et qu'il s'agit d'une application professionelle, peut-être vaut-il mieux passer à une importation dans ACCESS et travailler par requêtes SQL.  
Bon courage !

Reply

Marsh Posté le 09-10-2009 à 09:30:47    

produvba a écrit :

Plein de solutions !
Utiliser d'abord "Rechercheh()" pour chercher dans quelle colonne se trouve par exemple "Durée" si c'est l'item recherché, puis utiliser le numéro de cette colonne pour aller chercher la donnée.
Peut-être plus élégant, créer un tableau croisé dynamique et utiliser la fonction "LIRETABLEAUCROISEDYNAMIQUE" (je ne sais plus la syntaxe, mais il suffit de créer un TCD et essayer)...
Si tu as des données comme cela bien structurée et qu'il s'agit d'une application professionelle, peut-être vaut-il mieux passer à une importation dans ACCESS et travailler par requêtes SQL.  
Bon courage !


 
Ah oui, bonne idée la fonction rechercheh(), je m'en souviens maintenant !
 
Merci du conseil, et à la prochaine pour d'autres questions :D


---------------
Mario Kart for Ever
Reply

Marsh Posté le 14-10-2009 à 14:39:34    

Autre solution, simple.
 
Nommer ta/tes cellules de titre, et en fonction du nom de la cellule sur laquelle tu es, executer ta/tes macros.
Ce qui fait que si tu inseres une colonne entre "Nom artiste" et "Annee" tes cellules "titre" garderont le meme nom.
Il n'y a plus qu'a faire reference aux cellules en fonction du nom du titre.
 
Insertion, Nom, Definir
ou saisir directement le nom dans "Zone nom"


Message édité par SuppotDeSaTante le 14-10-2009 à 14:40:58

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 14-10-2009 à 14:58:14    

Pas con, j'vais essayer ça, merci !


---------------
Mario Kart for Ever
Reply

Marsh Posté le 21-10-2009 à 11:35:13    

Salut à tous !
 
   Bon j'avance pas mal sur ma macro excel, et maintenant j'ai une question sur les évènements !
 
J'ai un tableau constitué de x lignes. Je voudrais que quand je clique sur une des cases de la première colonne, ça me sélectionne toute la ligne correspondante, mais également que je puisse faire cela pour plusieurs lignes. C'est à dire que si je clique en A2 puis A4 par exemple, ça me sélectionne toute la ligne 2 et toute la ligne 4. Est-ce possible ?
 
J'ai vu que ça pouvait se faire par un "SelectionChange", mais je ne parviens pas à mon but.
 
Merci d'avance pour vos conseils ;)


---------------
Mario Kart for Ever
Reply

Marsh Posté le 23-10-2009 à 07:29:28    

Bonjour,
as-tu essayé:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Selection.EntireRow.Select
Application.EnableEvents = True
End If
End Sub
 
Cordialement

Reply

Marsh Posté le 20-11-2009 à 10:56:17    

Slt
éventuellement une astuce pour sélectionner plusieurs lignes non contigües consiste à faire un filtre sur un critère commun à ces lignes, ou bien aux autres, puis:  
    Selection.SpecialCells(xlCellTypeVisible).EntireRow.Select
 
puis supprime le filtre avec        Selection.AutoFilter
et voilà

Reply

Marsh Posté le 20-11-2009 à 11:20:42    

suite:
si tu n'as pas de critères communs mais que tu veux sélectionner 1 ligne sur deux, tu filtres les lignes paires (ou impaires); si c'est pour une mise en forme, tu peux aussi utiliser la M En F conditionnelle, que tu peux aussi baser sur les lignes paires.

Reply

Marsh Posté le 20-11-2009 à 11:23:57    

C'est marrant que ce topic remonte justement maintenant, je vais me réattaquer à ce fichier la semaine prochaine :D .


---------------
Mario Kart for Ever
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed