je parcours la première ligne d'un fichier excel. Si ma macro trouve une valeur définie, il me donne la colonne à laquelle il a trouvé cette valeur. Le problème, c'est que je récupère l'index de la colonne, et je voudra son "nom". C'est à dire, si je trouve mon mot à la colonne D, il va me renvoyer 4, et moi je voudrai "D"
Code:
For i = 2 To nbRubrique 'on parcourt les rubriques
For Each col In Sheets(nomFeuille).Columns 'on parcourt les colonnes de la feuille a traiter
If Sheets(nomFeuille).Cells(1, col.Column).Value = Sheets("calcul").Cells(i, 1) Then 'si ça a le meme nom
Sheets("calcul").Range("B" & i).Value = col.Column
Exit For
End If
Next
Next
voila ce que j'ai fait. J'ai pensé utiliser l'attribut Name, mais ça me lance en erreur.
Sinon j'ai pense créer une collection avec tous les A, B, C .... AA, AB ... mais je me vois pas rentrer 256 elements...
Ou alors faire un traitement avec le code ascii, char(col.column+asc("A")-1), mais ça ne marche plus des qu'on arrive aux colonnes "AA" ...
Pour resumer ma demande, je voudrai pouvoir recuperer le nom de la colonne depuis son index
Un peu tiré par les cheveux... je te propose la modif suivante à ta macro :
Code:
Dim nomcol As String 'déclare la variable nomcol
For i = 2 To nbrubrique 'on parcourt les rubriques
For Each col In Sheets(nomFeuille).Columns 'on parcourt les colonnes de la feuille a traiter
If Sheets(nomFeuille).Cells(1, col.Column).Value = Sheets("calcul").Cells(i, 1) Then 'si ça a le meme nom
For x = 2 To Len(col.Address) 'boucle sur tous les caractères de l'adresse de col
If Mid(col.Address, x, 1) = "$" Then 'condition : repère le second "$" dans l'adresse
nomcol = Mid(col.Address, 2, x - 2) 'définit la variable nomcol (extrait la colonne)
Exit For 'sort de la boucle
End If 'fin de la condition
Next x 'prochain caractère de l'adresse de col
Sheets("calcul").Range("B" & i).Value = nomcol
Exit For
End If
Next
Next
If Num > 26 Then
If Not (Num Mod 26) = 0 Then 'si c'est congru a 0 modulo 26
Resultat = Chr(Asc("A") + Int(Num / 26) - 1)
Resultat = Resultat & Chr(Asc("A") + Num Mod 26 - 1)
Else 'sinon
Resultat = Chr(Asc("A") + Int(Num / 26) - 2) 'on bricole
Resultat = Resultat & "Z" 'Chr(Asc("A") + Num Mod 26 - 1)
End If
Else
Resultat = Chr(Asc("A") + Num - 1)
End If
Sub test()
Dim colonne As String
colonne = _
IIf(Mid(ActiveCell.Address(0, 0), 3, 1) <> vbNullString, Left(ActiveCell.Address(0, 0), 2), Left(ActiveCell.Address(0, 0), 1))
MsgBox colonne
End Sub
Et puis comme je me suis fatigué à le traduire en VBA :
Code:
Function NomCol(Col As Long) As String
If Col < 27 Then
NomCol = Chr(Col + 64)
Else
NomCol = Chr(Int((Col - 0.1) / 26) + 64) & Chr(IIf((Col Mod 26) = 0, 26, (Col Mod 26)) + 64)
End If
End Function
Tout dépend, moi j'avais compris qu'avec en entrée un numéro de colonne (que j'imagine en C3) on voulait la/les lettre(s) de colonnes correspondantes, et pas forcément la/les letrre(s) de la colonne où l'on se trouve...