IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[Excel] question fonction !!!


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Points : 16
    Points
    16
    Par défaut [Excel] question fonction !!!
    Salut à tous,
    voila ça requiert pas trop de la prog mais bon...

    Est-ce que vous connaitriez une fonction dans excel qui pour un chiffre doné (entre 1 et 256) donne la lettre de la colonne ?

    exemple je donne 1 ça me donne a
    je donne 256 ça donne IV

    voila merci
    (j'espere que ça existe je vois mal comment je vais la programmer)

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    exemple je donne 1 ça me donne a
    ?

    Non mais "j'ai 97 et j'obtiens a... oui"
    maintenant, c'est vrai, 1 = 97-96

    quant à
    je donne 256 ça donne IV
    c'est également possible, comme serait possible un 256 transformé en "je reviens du cinéma"...
    Revois ta table de caractères ascii et cherches à comprendre comment l'utiliser

    Penses également (et surtout) à voir ce qu'est la fonction CAR

  3. #3
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(ADRESSE(1;COLONNE();4);NBCAR(ADRESSE(1;COLONNE();4))-1)

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    la fonction colonne() renvoie le numéro de colonne et peut être utilisée dans tous les cas
    ceci étant colonne si colonne 26 vaut z et 27 vaut AA
    je peux écrire colonne() en base 26
    soit 256
    int(256/26)=9
    mod(256;26)=22
    asc("A") vaut A donc chr(65+9-1) donnera i
    et chr(65+22-1) donnera V
    avec un peu de chance ca doi marcher
    attention il y a deux cas de figures x<27 et autre
    Elle est pas belle la vie ?

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Qu'est ce que cela apporte de plus ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour moi rien
    mais cela répond au besoin exprimé
    c'est à lui de voir
    Elle est pas belle la vie ?

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je crois devoir rappeler que la question de fealendril était :

    Est-ce que vous connaitriez une fonction dans excel qui pour un chiffre doné (entre 1 et 256) donne la lettre de la colonne ?

    exemple je donne 1 ça me donne a
    je donne 256 ça donne IV
    Celà pouvait être interprêté très différemment, mais... Au fait : quelqu'un sait ce que fealendril a voulu dire exactement ?

    Si oui : qu'il veuille bien donner ici son interprétation, pour que je comprenne ce que je n'ai apparemment pas su deviner...
    MERCI !

    PS : Sa question était-elle, finalement, "comment, pour une cellule donnée, pourrais-je connaître dans quelle colonne elle est située" ???

    Ma foi... C'est peut-être çà...

  8. #8
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    J'ai écrit il-y-a bien longtemps, quand j'ai débuté en VBA, une fonction qui faisait ça, et si mes souvenirs sont bons, elle marchait bien. Elle était effectivement à base de "NumCol Mod 26", et de code ASCII de A à Z ...
    Mais je l'ai HEUREUSEMENT oubliée, car je n'utilise PLUS que Cells(NumLigne, NumColonne), qui marche mieux, et dans tous les cas, et est tellement plus simple à utiliser que "Range("AC2").
    Un conseil, Fealendril : Oublie cette fonction, et utilises Cells.

    Maintenant, tu es libre...

  9. #9
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut,

    Dans la FAQ il y a :
    Comment obtenir la valeur en lettre de la colonne ?

    auteur : bidou

    La formule générique est

    NumCol = Cells(1, 72).Column
    MsgBox IIf(NumCol > 26, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(64 + NumCol))
    Voilà t'as pas du chercher au bon endrois

    Pour l'inverse j'ai un fais un prog (pour m'amuser )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    ' macro transforme la valeur d'une colonne alpha en num
    Sub cola_coln()
        Dim Err As Boolean
        Dim Val_sais As String
        Dim diz_sup As Integer
        Dim Message As String
        Const Messageinit = "Veuillez saisir la valeur de la colonne : "
     
        Err = True
        Val_sais = ""
        diz_sup = 0
        Message = Messageinit
        While Err = True
            Val_sais = UCase(InputBox(Message))
            If Len(Val_sais) > 2 Or Val_sais = "" Then
                Message = "Vous avez saisi une valeur incorecte !" & Chr(10) & Chr(13) & Messageinit
            Else
                If Len(Val_sais) = 2 Then
                    unisais = Asc(Mid(Val_sais, 2, 1))
                    dizsais = Asc(Mid(Val_sais, 1, 1))
                    If unisais < 91 And unisais > 64 And dizsais < 74 And dizsais > 64 Then
                        Err = False
                    Else
                        Message = "Vous avez saisi une valeur incorecte. " & Chr(13) & Chr(10) & Messageinit
                    End If
                Else
                    unisais = Asc(Val_sais)
                    If unisais > 90 Or unisais < 65 Then
                        Message = "Vous avez saisi une valeur incorecte. " & Chr(13) & Chr(10) & Messageinit
                    Else
                        Err = False
                    End If
                End If
            End If
        Wend
        If Len(Val_sais) = 1 Then
            diz_sup = 0
            val_num = Asc(Val_sais) - 64 + diz_sup
            MsgBox "la valeur numérique de : " & Val_sais & " est : " & Str(val_num)
        Else
            If Asc(Mid(Val_sais, 2, 1)) > 86 And Mid(Val_sais, 1, 1) = "I" Then
                MsgBox "Vous avez saisi une valeur trop grande "
            Else
                Select Case Mid(Val_sais, 1, 1)
                    Case "A"
                        diz_sup = 26
                    Case "B"
                        diz_sup = 52
                    Case "C"
                        diz_sup = 78
                    Case "D"
                        diz_sup = 104
                    Case "E"
                        diz_sup = 130
                    Case "F"
                        diz_sup = 156
                    Case "G"
                        diz_sup = 182
                    Case "H"
                        diz_sup = 208
                    Case "I"
                        diz_sup = 234
                    Case Else
                        MsgBox "impossible veuillez débogguer le pbl"
                End Select
                val_num = Asc(Mid(Val_sais, 2, 1)) - 64 + diz_sup
                MsgBox "la valeur numérique de : " & Val_sais & " est : " & Str(val_num)
            End If
        End If
     
    End Sub
    Bien evidemment aujourd'hui je fais comme Megaxel j'utilise Cells ...

    Voilà Pareillement comme Megaxel je dis : maintenant tu fais comme tu veux ...

    Igloobel

    PS: Je suis prêt à écouter toutes critique constructive concernant mon petit prog
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  10. #10
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Si je me souviens bien, moi, je FAISAIS comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
        Dim NomColonne As String
        Dim NumeroColonne As Integer
        On Error GoTo SaisieFausse
        NomColonne = InputBox("Nom de la colonne:")
        NumeroColonne = Range(NomColonne & "1").Column
        MsgBox ("Numero : " & NumeroColonne)
     
        Exit Sub
     
    SaisieFausse:
        MsgBox ("Saisie incorrecte")
    End Sub

  11. #11
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    C'est vrai qu'a l'époque ou je l'ai fais je connaissais pas .column qui simplifie beaucoup les choses . Mais bon j'aurais pu verifier avant de reprendre le code tel que je l'avais fais à l'époque.

    C'est vrai ta solution est plus simple !

    En tout cas j'aimerais bien que Fealendril donne de ses nouvelles

    Igloobel
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  12. #12
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    C'est vrai qu'à cette époque, j'étais nul en "cells", mais j'étais déjà super fort en '.Column"...

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    l'inverse pourrait se coder ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function numcol(x As String) As Integer
    x = UCase(x)
    If Len(x) = 1 Then
    numcol = (Asc(x) - 64)
    Else
    numcol = ((Asc(Left(x, 1)) - 64) * 26) + (Asc(Right(x, 1)) - 64)
    End If
    End Function
    ce n'est pas une critique juste un autre mode
    Elle est pas belle la vie ?

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'arrive complètement après la bagarre mais j'avais ça, alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Columns(5).Address(RowAbsolute:=False, ColumnAbsolute:=False, ReferenceStyle:=xlA1)
    Tu dis

    A+

    Edit
    Et puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NoCol = Columns(256).Address(RowAbsolute:=False, ColumnAbsolute:=False, ReferenceStyle:=xlA1)
    NoCol = Left(NoCol, InStr(NoCol, ":") - 1)
    MsgBox NoCol

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Salut Iglobel, j'avais plus simple que ta page de code, alors si t'en as besoin...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NoCol = "IV"
    MsgBox Range(NoCol + ":" + NoCol).Column
    A+

  16. #16
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Et où est passé Fealendril afin qu'il nous dise si tout ce travail correspond bien (rien n'est moins sur... sa question reste quelque peu ambigüe..) à ce qu'il a voulu exprimer ?


  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Chais pas où il est passé mais j'en profite...
    T'as écrit ça, jpg.marques :
    exemple je donne 1 ça me donne a
    ?

    Non mais "j'ai 97 et j'obtiens a... oui"
    maintenant, c'est vrai, 1 = 97-96

    quant à
    je donne 256 ça donne IV
    c'est également possible, comme serait possible un 256 transformé en "je reviens du cinéma"...
    Revois ta table de caractères ascii et cherches à comprendre comment l'utiliser
    Penses également (et surtout) à voir ce qu'est la fonction CAR
    Tu es sûr ? Parce qu'en l'occurence, le a de Fealendril est en fait un A, et donc chr(65)... D'où ma question qui, je n'en doute pas, va éclairer Fealendril : Ça marche avec chr(97) comme N° de colonne ?

    A+... sans doute

    PS - Je sens que va encore falloir que j'efface plein de messages...

  18. #18
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    C'est sûr....!

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/10/2010, 19h56
  2. Changement couleur cellule EXCEL en fonction du texte
    Par kikaillo dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 14/04/2006, 14h22
  3. POI excel et fonction loadPicture
    Par tit_oune dans le forum Documents
    Réponses: 10
    Dernier message: 04/04/2006, 11h12
  4. VBA Excel : la fonction ET
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2005, 14h48
  5. Insertion d'un filtre élaboré d'excel ds fonction automation
    Par MELINE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/09/2005, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo