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 :

Lettre précedente et/ou suivante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut Lettre précedente et/ou suivante
    Bonjour , j'aimerai un peu d'aide pour un bout de code
    voici ce que contien ma feuille
    dans la colonne A : un nom de document
    dans la colonne B : une révision (correpondant à une lettre)
    dans la colonne C : le nombre de révision pour un document


    Je souhaite avoir dans la colonne D , la révison précedente (si elle existe) et dans la colonne E , la révision suivante (si elle existe )

    je vous joint un fichier xls avec le résultat experé sachant que tout est donné sauf les colonnes D et E

    PS: en réalité il y a beaucoup plus de ligne sinon je l'aurai fais à la main

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Par défaut
    Bonjour,

    Je te joins le fichier avec une solution.

    J'ai créé la formule de calcul ci dessous :

    SI($B2="A";"";CHOISIR(EQUIV($B2;Alphabet;0)-1;"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"))

    La première condition me permet de tester pour ne rien affiche dans précédent si la révision est A

    La fonction EQUIV permet de récuper la position de la lettre de la révision dans l'alphabet

    La fonction CHOISIR permet de récupérer la lettre à afficher fonction de la position de la lettre de la révision
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour , merci pour ta réponse

    malheureusement je ne connais pas bien les fonctions donc j'ai du mal à adapté ta solution à mon probleme.
    En effet le fichier joint est un fichier simplifier de mon vrai fichier donc pas avec les meme colonne ...
    De plus, tu as mal compris une partie du probleme : si une révison F existe , il n'y a pas forcement de révision E
    toute les révisions sont dans la feuille
    c'est pour ca que dans le fichier joint je n'ai pas rempli certaine cases

    Pour en revenir à la solution que tu me propose ; je souhaite savoir à quoi sert l'alphabet de la feuille 2 ?

    Si quelqu'un à une solution différente ou un complément n'hésitez pas

  4. #4
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    On peut utiliser les fonctions CAR() et CODE().

    CODE(Réf) renvoie le Code ASCII (cf. précision à la fin du message) de la première lettre de Réf (qui peut être une cellule, un nom, une chaîne de caractères).

    Ce code est égal à 65 pour "A", 66 pour "B", ... jusqu’à 90 pour "Z".

    CAR(Num) renvoie le caractère dont le code correspond à Num.

    Dans ton tableau, en D2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(B2 = "A";"";CAR(CODE(B2) - 1))
    et en E2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(B2 = "Z";"A définir après Z";CAR(CODE(B2) + 1))
    La formule en E2 nécessite une adaptation, pour laquelle tu ne nous a pas fourni d’info : que faut-il mettre après "Z" ?

    Les 2 formules sont à recopier vers le bas.

    Le principe est simple :
    • CODE(B2) renvoie le code de la lettre en B2
    • CODE(B2) - 1 celui de la lettre précédente
    • CODE(B2) + 1 celui de la lettre suivante

    NB - CODE() ne renvoie réellement lze code ASCII que jusqu’au caractère 127. Pour les caractères 128 à 255, cela dépend du système d’exploitation : "é" n’a pas le même code sous Mac OS ou sous Windows.

    Cordialement,

    Michel Gaboly

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Voici un code qui marche :

    Sub Révisions()

    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
    Dim A As Long
    A = 2
     
    'Boucle sur toutes les lignes
    Do Until IsEmpty(Cells(A, 1))
     
        'Si Nb Révision > 1
        If Cells(A, 3) > 1 Then
     
            'Cas Première révision
            If Cells(A, 1) <> Cells(A - 1, 1) Then
     
                'On ne Remplit que la Révision "Next"
                If Asc(Cells(A, 2)) < 90 Then Cells(A, 5) = Chr(Asc(Cells(A, 2)) + 1)
     
            'N-ième Révision
            Else
     
                'Si Lettre Sup à 'A' alors Remplissage Révision Prev
                If Asc(Cells(A, 2)) > 65 Then Cells(A, 4) = Chr(Asc(Cells(A, 2)) - 1)
     
                'Si cette Révision n'est pas la Dernière du Doc Concerné
                If Cells(A, 1) = Cells(A + 1, 1) Then
     
                    'Si Lettre Inf à 'Z', alors remplissage Next
                    If Asc(Cells(A, 2)) < 90 Then Cells(A, 5) = Chr(Asc(Cells(A, 2)) + 1)
                End If
            End If
        End If
        A = A + 1
    Loop
    End Sub
    A coller dans le code de Thisworkbook.

  6. #6
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Par défaut
    Bonjour,

    Je pense que la proposition de Bigalo est la plus intéressante, car courte et sans grande fonction.

    Pour ma part, j'ai ajouter la liste alphabétique dans la feuille2 pour avoir une liste de référence utilisée par la fonction EQUIV.
    En effet le rôle de cette fonction est de retrouver la position d'une information dans une plage de cellules. Ainsi je calculais la position de la lettre dans l'alphabet.

    A propos de la fonction CHOISIR
    Syntaxe : CHOISIR(index;Choix1;choix2;...;Choix29)
    Cette fonction permet de retrouver un choix dans une liste(29). La position du choix étant donné par un index.

    En consequence, la valeur de l'index était donnée par la fonction Equiv.

    A+


    P.S : si tu as la réponse à ton problème, pense au tag
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    ne connaissant pas trop les fonctions et préferent passé par macro, j'ai utilisé les fonctions asc et chr
    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/02/2012, 16h04
  2. Masquer les boutons Précedent/Suivant
    Par Addouna dans le forum Struts 1
    Réponses: 5
    Dernier message: 02/11/2006, 14h38
  3. Trouver la lettre suivante?! A...B..C
    Par ozzmax dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2006, 17h59
  4. Afficher la lettre suivante
    Par Invité dans le forum ASP
    Réponses: 9
    Dernier message: 22/04/2005, 11h33
  5. [sql] lettre suivante
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/04/2005, 16h03

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