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

  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

  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

  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

  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

  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 546
    Points
    15 546
    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 546
    Points
    15 546
    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 546
    Points
    15 546
    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