Sélectionner une colonne en fonction du nom de première valeur
Résolu
scuti
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
scuti Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
scuti Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travail actuellement avec des macro sur excel 2016,J'aimerai que ces macros puissent être utilisables sur d'autres fichiers.
Les fichiers ayant les même noms de colonnes mais pas dans le même ordre, j'aimerais savoir s'il existe une commande pouvant sélectionner une colonne en fonction de sa première valeur.
(ensuite je sélectionne la première colonne et fait un graphique avec)
Merci de votre aide,
Je travail actuellement avec des macro sur excel 2016,J'aimerai que ces macros puissent être utilisables sur d'autres fichiers.
Les fichiers ayant les même noms de colonnes mais pas dans le même ordre, j'aimerais savoir s'il existe une commande pouvant sélectionner une colonne en fonction de sa première valeur.
(ensuite je sélectionne la première colonne et fait un graphique avec)
Merci de votre aide,
A voir également:
- Vba sélectionner une colonne par son nom
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
- Figer une colonne excel - Guide
7 réponses
Re,
Essaie comme ça :
Essaie comme ça :
Sub Macro1() Dim O As Worksheet Dim R As Range Dim COL As Integer Dim LI As Integer Set O = Worksheets("Feuil1") Set R = O.Rows(1).Find("Vitesse", , xlValues, xlWhole) If R Is Nothing Then Exit Sub COL = R.Column LI = O.Cells(Application.Rows.Count, "A").End(xlUp).Row Set pl = Application.Union(O.Range(O.Cells(1, 1), O.Cells(LI, 1)), O.Range(O.Cells(1, COL), O.Cells(LI, COL))) ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=pl O.Cells(1, COL).Select End Sub
scuti
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
Super, Merci beaucoup, ça fonctionne :D
Bonjour,
une autre facon de faire:
Choix etant la variable qui contient l'entete recherchee
une autre facon de faire:
Choix etant la variable qui contient l'entete recherchee
Dim Cel As Range, Colchoix As Long, sColchoix As String Set Cel = Range("Q2:AE2").Find(what:=Choix) Colchoix = Cel.Column 'numerique sColchoix = Split(Cel(8, Cel.Column).Address, "$")(1) 'Alphanumerique
Bonjour Scuti, bonjour le forum,
Essaie comme ça :
Essaie comme ça :
Sub Macro1() Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée) Dim O As Worksheet 'déclare la variable O (Onglet) Dim R As Range 'déclare la variable R (Recherche) Dim COL As Integer 'déclare la variable COL (Colonne) BE = Application.InputBox("Tapez le texte recherché !", "TEXTE", Type:=2) 'définit la boîte d'entrée BE If BE = False Or BE = "" Then Exit Sub 'si [Annuler] ou non renseignée, sort de la procédure Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas) Set R = O.Rows(1).Find(BE, , xlValues, xlWhole) 'définit la recherche R (recheche BE entier dans la ligne 1 de l'onglet O) If R Is Nothing Then Exit Sub 'si aucun occurrence n'est trouvée, sort de la procédure COL = R.Column 'récupe la colonne COL de la première occurrence trouvée MsgBox COL 'message indiquant la colonne COL (ligne à supprimer par la suite...) End Sub
Bonjour scuti,
Non, il n'existe pas une telle fonction : tu dois faire une boucle de
recherche sur ta ligne d'en-têtes afin d'en trouver le nom.
Exemple :
Ta ligne d'en-têtes est en ligne 5, des colonnes 1 à 10 ;
et tu cherches la valeur d'en-tête "Montant" :
Si on a trouvé la colonne "Montant" :
a) Exit For permet de sortir aussitôt de la boucle, car c'est inutile
de tester les autres colonnes qui sont à droite. ;)
b) col contient ton n° de colonne
----------------------------------------
Si ton Traitement est très long, tu peux le déporter plus bas
en utilisant une variable drapeau : flag (ou un autre nom
de ton choix).
⚠ Lors de sa déclaration, flag vaut déjà False ; je lui donne
ce sens : « colonne "Montant" non trouvée ».
flag est un drapeau : False (implicite) = non trouvé ;
si "Montant" est trouvé, flag est mis à True puis on
sort aussitôt de la boucle.
Juste après, et seulement si flag est True, on effectue
le traitement de la colonne "Montant".
Tu auras remarqué que If flag = True Then peut être
abrégé en If flag Then ; c'est pas un oubli ! ;)
Non, il n'existe pas une telle fonction : tu dois faire une boucle de
recherche sur ta ligne d'en-têtes afin d'en trouver le nom.
Exemple :
Ta ligne d'en-têtes est en ligne 5, des colonnes 1 à 10 ;
et tu cherches la valeur d'en-tête "Montant" :
Option Explicit Dim col As Integer For col = 1 To 10 If Cells(5, col) = "Montant" Then ' Traitement pour la colonne "Montant" Exit For End If Next col ' Suite du code
Si on a trouvé la colonne "Montant" :
a) Exit For permet de sortir aussitôt de la boucle, car c'est inutile
de tester les autres colonnes qui sont à droite. ;)
b) col contient ton n° de colonne
----------------------------------------
Si ton Traitement est très long, tu peux le déporter plus bas
en utilisant une variable drapeau : flag (ou un autre nom
de ton choix).
⚠ Lors de sa déclaration, flag vaut déjà False ; je lui donne
ce sens : « colonne "Montant" non trouvée ».
Option Explicit Dim col As Integer, flag as Boolean For col = 1 To 10 If Cells(5, col) = "Montant" Then flag = True: Exit For Next col If flag Then ' Traitement pour la colonne "Montant" End If ' Suite du code
flag est un drapeau : False (implicite) = non trouvé ;
si "Montant" est trouvé, flag est mis à True puis on
sort aussitôt de la boucle.
Juste après, et seulement si flag est True, on effectue
le traitement de la colonne "Montant".
Tu auras remarqué que If flag = True Then peut être
abrégé en If flag Then ; c'est pas un oubli ! ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour toutes vos réponses, mais du-coup je ne sais pas la quelle choisir.
Mettons que je veux rajouter ça après, avec la colonne C:C étant la colonne sélectionner par son nom,
Sub Macro5()
'
' Macro5 Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+G
'
Range("A:A,C:C").Select
Range("C1").Activate
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$A:$A,Feuil1!$C:$C")
End Sub
(c'est ce qui créée un graphique avec A:A et C:C)
Que doit je mettre à la place de C:C
et quel programme choisir ?
Mettons que je veux rajouter ça après, avec la colonne C:C étant la colonne sélectionner par son nom,
Sub Macro5()
'
' Macro5 Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+G
'
Range("A:A,C:C").Select
Range("C1").Activate
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$A:$A,Feuil1!$C:$C")
End Sub
(c'est ce qui créée un graphique avec A:A et C:C)
Que doit je mettre à la place de C:C
et quel programme choisir ?
Bonjour le fil, bonjour le forum,
Les deux codes sont assez similaires. J'ai utilisé la fonction Find pour trouver la colonne et Paul a utilisé une boucle For... Next.
Mon code utilise une boîte d'entrée te permettant de taper le nom de la recherche. Si ce nom est fixe et ne varie jamais, les lignes faisant référence à la boîtes d'entrée deviennent inutile dans mon code...
Mais tu ne dis absolument rien la-dessus ?!... Je me demande même si tu as testé les deux codes...
Quoi qu'en soit, et bizarrement, nous avons utilisé le même nom pour la variable Paul et moi-même : col.
Donc au final pour ton code, remplace :
par :
puis le reste de ton code...
Les deux codes sont assez similaires. J'ai utilisé la fonction Find pour trouver la colonne et Paul a utilisé une boucle For... Next.
Mon code utilise une boîte d'entrée te permettant de taper le nom de la recherche. Si ce nom est fixe et ne varie jamais, les lignes faisant référence à la boîtes d'entrée deviennent inutile dans mon code...
Mais tu ne dis absolument rien la-dessus ?!... Je me demande même si tu as testé les deux codes...
Quoi qu'en soit, et bizarrement, nous avons utilisé le même nom pour la variable Paul et moi-même : col.
Donc au final pour ton code, remplace :
Range("A:A,C:C").Select Range("C1").Activate
par :
Application.Union(Columns(1), Columns(col)).Select Cells(1, col).Activate
puis le reste de ton code...
Voici le code en entier:
Dim BE As Variant
Dim O As Worksheet
Dim R As Range
Dim COL As Integer
BE = Application.InputBox("vitesse", "TEXTE", Type:=2)
If BE = False Or BE = "" Then Exit Sub
Set O = Worksheets("Feuil1")
Set R = O.Rows(1).Find(BE, , xlValues, xlWhole)
If R Is Nothing Then Exit Sub
COL = R.Column
MsgBox COL
'
Application.Union(Columns(1), Columns(COL)).Select
Cells(1, COL).Activate
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$A:$A,Feuil1!$C:$C")
Le mot à trouver est vitesse dans la première ligne de l'onglet Feuil1, Quand je l'execute une boite appeler TEXT apparais mais pas de graphique (colonne vtesse en fonction de la colonne A:A)..
J'ai du louper un truc ^^
Merci de ton aide
Dim BE As Variant
Dim O As Worksheet
Dim R As Range
Dim COL As Integer
BE = Application.InputBox("vitesse", "TEXTE", Type:=2)
If BE = False Or BE = "" Then Exit Sub
Set O = Worksheets("Feuil1")
Set R = O.Rows(1).Find(BE, , xlValues, xlWhole)
If R Is Nothing Then Exit Sub
COL = R.Column
MsgBox COL
'
Application.Union(Columns(1), Columns(COL)).Select
Cells(1, COL).Activate
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$A:$A,Feuil1!$C:$C")
Le mot à trouver est vitesse dans la première ligne de l'onglet Feuil1, Quand je l'execute une boite appeler TEXT apparais mais pas de graphique (colonne vtesse en fonction de la colonne A:A)..
J'ai du louper un truc ^^
Merci de ton aide