Proc qui reconnait une colonne selon l'entête

Bonjour à tous,

Je cherche à créer une procédure qui viendrait reconnaitre une colonne selon son entête. C'est à dire que j'aimerais via VBA, grâce à des dénominations affectées à chaque colonne, pouvoir utiliser ces dénominations plutôt que des adresses colonnes. De ce fait, les colonnes et leurs données pourraient s'inter-changer dans mon tableur sans que les macros en soient affectées.

Par exemple, imaginons que j'ai tableau comprenant 3 colonnes (Colonne 1, Colonne 2 et Colonne 3), j'aimerais que les macros (que je n'ai pas encore créé) reconnaissent les colonnes grâce à des dénominations du type col1, col2 et col3 dans VBA.

J'avai pensé à quelque chose du genre :

'pour obtenir la dernière colonne

der_col=Range("IV1").End(xlToLeft).column

from i=1 to der_col

if Sheets("Feuil1").Cell(1,i)="Colonne 1"

Then Sheets(Feuil1).Cell(1,i).name=col1"

End If,

Cependant, mon code ne va juste me renommer la colonne et non pas m'aider à pouvoir utiliser la dénomination col1 dans VBA.

Sachant que mon fichier pourrait contenir par la suite beaucoup plus de colonnes, je me demande aussi comment ne pas écrire 300 fois la même chose.

Merci par avance pour votre aide.

Bonjour

Une idée de départ

pav24 a écrit :

je me demande aussi comment ne pas écrire 300 fois la même chose

Écris le 1 fois déjà

Merci pour votre réponse,

Je viens de regarder votre fichier. En fait, je ne cherche pas à écrire dans la colonne quelque soit sa place dans le tableur.

Il s'agirait plus de pouvoir remplacer dans un code VBA, l'adresse de la colonne comme celle si dessous (Cells(j , 1) correspondant par exemple à "Colonne 1")

Dim j As Integer

Sheets("Feuil1").Cells(j , 1)="blabla"

par une dénomination du type "col1". Au final, je voudrais avoir mon code tel qu'avec Sheets("Feuil1").col1="blabla", il reconnaisse sur le tableur "Colonne1" peut importe l'endroit où elle se trouve.

L'avantage serait de ne pas avoir à modifier le code si les colonnes venaient à être déplacées sur la feuille.

Bonjour

Dans le programme que je t'ai passe écris

Sub test()
Range("Col1") = "Blablabla"
End Sub

C'est ce que tu veux ?

J'ai fait un petit exemple sur un fichier avec la macro, enfin ce que je cherche à en tirer.

Le but est de pouvoir continuer à faire des mises à jour, par exemple, d'une colonne de la feuille 1 à partir de données d'une autre feuille en utilisant des dénominations du même format, type col1, col2, col3 en correspondance avec les noms de chaque entête de colonne.

La macro de mon fichier est évidemment érronnée.

53pav24testreco.xlsm (13.19 Ko)

Bonjour

Que tentes tu de faire avec ce code ?

If Sheets("Feuil1").col1 = Sheets("Feuil2").Cells(j, 6) Then

col1 représente ?

et tu compares avec la cellule F2 de la page"Feuil2"

col1 représente Cells(i,1) avec i=2, ce que j'ai appelé Colonne 1. Dans mes macros VBA, j'aimerais taper col1 en lieu et place des codes usuels pour appeler la Colonne A car je voudrais que mes colonnes deviennent interchangeables et que ma macro retrouve les données de ma Colonne nommée "Colonne1" même si elle se retrouve au niveau de la Colonne D d'excel.

C'est pour ça que je cherche quelque chose qui se réfererait à l'entête de la colonne (ici Colonne 1) pour retrouver les données voulues.

En gros, ma macro va chercher la colonne en question grâce à la dénomination que j'en ai faite sous VBA, c'est à dire ici col1 (et ne se fie donc plus aux adresses des colonnes) pour ensuite appliquer la loi comme celle que j'ai mis dans mon exemple.

C'est pour ça que j'imagine que l'entête de ma colonne joue un rôle dans cette macro que je n'arrive pas à trouver.

Bonjour

Depuis le début je t'ai fait un fichier dans lequel la position des colonnes (col1,col2 et col3) est sans importance

As tu essayer d’insérer des colonnes ?

Et peu importe la position on arrive, sans modifier la macro, à écrire au bon endroit

Donc si on arrive à écrire on peu y faire ce que l'on veut

Bonjour,

Le fait de pouvoir déplacer les colonnes résoud bien un de mes problèmes. mais dois-je utiliser .Address afin de pouvoir utiliser une dénomination pour la colonne sous VBA?

Je ne vois pas comment à partir de ce code je pourrais appeler ma colonne par une dénomination du type "col1" et la réutiliser dans toutes mes autres procédures VBA.

Le but de cette macro est juste de pouvoir identifier la colonne voulue et de pouvoir lui attacher une dénomination choisie sous VBA (en variable j'imagine), pour que même si mes colonnes changent de position, mes autres macros ne soient pas touchées et que le code continue à fonctionner normalement.

Je viens de refaire le fichier avec une macro de départ, et là où je cherche à arriver. J'espère que cela pourra rendre les choses plus claires.

80pav24testreco.xlsm (16.29 Ko)

C'est effectivement proche de ce que je recherche.

J'avais déjà essayé de mettre les Range mais j'avais toujours l'erreur "Range global de l'objet à échoué".

D'ailleurs quand je prends ta macro et la copie sur un nouveau classeur avec les mêmes colonnes 1&2 sur la Feuil1 et ColonneA sur la feuille 2, je retrouve cette erreur. Pourtant le code ne bouge pas. J'ai ddu mal à comprendre pourquoi un copier coller d'un classeur à un autre peut créer une erreur.

Une autre petite question :

Comment puis-je faire en sorte de donner un nom (le fameux col1) à ce Range("Colonne1").Cells(i, 1) dans VBA et l'utiliser dans mes boucles IF/THEN?

Bonjour

Quand tu copies n'oublies pas de définir Colonne1 et Colonne2

pav24 a écrit :

Comment puis-je faire en sorte de donner un nom (le fameux col1) à ce Range("Colonne1").Cells(i, 1) dans VBA et l'utiliser dans mes boucles IF/THEN?

Je ne sais pas si avec 2010 tu peux nommer une zone avec Col1 (cela ressemble à une numérotation de cellule)

Quand tu définies une zone c'est comme si tu avais une feuille dont la cellule de base (feuille Excel c'est A1) est le nom que tu as donné

La cellule de base de "Colonne1" est Range("Colonne1")

Pour écrire/lire dans la 3ème ligne et 2ème colonne : Range("Colonne").Cells(3,2) ou Range("Colonne1").Range("B3")

Il faut vraiment que tu assimiles ce truc (j'ai du mal) pour pouvoir utiliser des "colonnes flottantes"

Ok, tu ne les définis pas via VBA, car dans ton code il n'y a rien qui définit Colonne1 et Colonne2 ?

Bonjour

D'après toi il faudrait d'abord les chercher, les nommer, puis s'en servir

Moi je pense on les nomme et l'on s'en sert

Si je ne les recherche pas d'abord par une fonction, comme puis-je les définir ?

Bonjour

Quand je construis un tableau je sais où sont les colonnes, c'est à ce moment la que je les définies

Ensuite je déplaces ces colonnes et aucun problème

Oui d'accord, je pense que c'est sur ce point où ce n'est pas très clair dans ma tête.

Si je définis une colonne, je vais lui attribuer le Range qui lui correspond. Donc finalement, avec le code Range("Colonne1"), ça devient redondant. Et surtout si je définis ma colonne, je le fais pour une zone précise qui m'empêche (sans la macro du fichier précedent) de la déplacer.

Je ne vois pas comment expliquer sur VBA que "Colonne1" est une plage de cellules sans dire à VBA de rechercher dans chaque colonne le mot Colonne1 puis de lui attribuer ce nom pour finalement le mettre dans mon Range.

Ok merci, je regarderai ça plus tard, je n'ai pas youtube à dispo.

Rechercher des sujets similaires à "proc qui reconnait colonne entete"