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 :

Utiliser une lettre comme compteur ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut Utiliser une lettre comme compteur ?
    Bonjour à toutes et à tous,

    Après vous avoir soumis récemment un problème quasi insoluble (je n'ai d'ailleurs pas encore trouvé, mais je ne désespère pas) voici plus simple :

    Je dois sortir toutes les combinaisons de une et deux lettres existantes en excluant les doublons du genre : AI et IA.

    Pour ce faire je pensais faire :
    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
    Sub creation_poincon()
     
    Dim lign As Integer     'compteur de lignes
    Dim prem As Characters  'première lettre du poinçon
    Dim deuz As Characters  'deuxième lettre du poinçon
     
    Worksheets("Feuil1").Activate
    Range("A1:C2000").Clear
        lign = 2
        For prem = A To Z
            Cells(lign, 1) = prem
            lign = lign + 1
            For deuz = prem To Z
                Cells(lign, 1) = prem & deuz
                lign = lign + 1
            Next deuz
        Next prem
    End Sub
    Mais il me répond pour
    "Erreur de compilation. Incompatibilité de type"

    J'en déduits qu'on ne peut pas faire un compteur avec une lettre? Ou faut-il utiliser une autre fonction?
    Je sens que la solution est simple mais je ne la trouve pas...

    D'avance merci à tous !!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    J'ai réessayé en mettant "string" comme type de variable pour prem et deuz, et toujours le même message d'erreur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essayes en prenant le code ASCII de tes lettres, car de A à Z tu as une boucle continue, car cela se suit.

    Starec

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    essaye ce petit bout de code avec une listbox et tu vas vite comprendre (puis adapte à tes cellules)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command1_Click()
       For prem = Asc("A") To Asc("Z")
             For deuz = prem To Asc("Z")
                List1.AddItem Chr(prem) & Chr(deuz)
            Next deuz
        Next prem
    End Sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Merci beaucoup Starec et Ucfoutu,

    grâce à vos indices sur l'utilisation du code ASCII (j'avoue j'y avais pas pensé du tout ) j'ai résolu mon problème, qui était effectivement assez simple finalement.

    Voici donc le code final :
    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
    Sub creation_poincon()
     
    Dim lign As Integer     'compteur de lignes
    Dim prem As Integer     'première lettre du poinçon
    Dim deuz As Integer     'deuxième lettre du poinçon
     
    Worksheets("Feuil1").Activate
    Range("A1:C2000").Clear
     
        lign = 2
        For prem = 65 To 90
            Cells(lign, 1) = Chr(prem)
            lign = lign + 1
            For deuz = prem To 90
                Cells(lign, 1) = Chr(prem) & Chr(deuz)
                lign = lign + 1
            Next deuz
        Next prem
     
    End Sub
    Encore merci à vous deux !!

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon...

    Je te laisse maintenant deviner pourquoi il convient en outre de mettre une condition à ce qui doit être retenu, hein :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If prem <> deuz Then
           List1.AddItem Chr(prem) & Chr(deuz)
    End If
    Car tu cherches les combinaisons 2 à 2 des lettres de l'alphabet et sans cette condition, tu aurais des AA, BB, etc...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Je vois ce que tu veux dire, mais moi les combinaisons AA, BB, etc me vont.

    J'obtient donc une liste : A AA AB AB (...) B BB BC BD (...) ZZ

    Exactement ce qu'il me fallait !

    Et pour ton test sur la listbox, si on voulait éviter les AA, BB, etc, il ne faudrait pas mieux mettre ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command1_Click()
       For prem = Asc("A") To Asc("Z")
             For deuz = prem+1 To Asc("Z")
                List1.AddItem Chr(prem) & Chr(deuz)
            Next deuz
        Next prem
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR] Utiliser une collection comme source de données
    Par augereau dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/11/2006, 16h40
  2. comment utiliser une icone comme bouton
    Par othmane126 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2006, 19h14
  3. Utiliser une variable comme nom de fichier
    Par lo00_ dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/06/2006, 13h57
  4. Utiliser une Etiquette comme bouton
    Par pschmidtke dans le forum IHM
    Réponses: 6
    Dernier message: 07/06/2006, 14h48
  5. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12

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