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 :

Gestion de décalage des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Par défaut Gestion de décalage des cellules
    Hello world !

    je sollicite encore une fois votre aide sur un problème dont voici l’énoncé :

    j'ai une feuille Excel avec 5 colonnes ( A,B,C,D,E).
    Pour une ligne i , je souhaite affecter la valeur "0" à la colonne E , mais si et seulement si la valeur de cette colonne A est unique dans la colonne A. sinon la colonne A vaut "-1".

    Note: avec l'hypothèse que la colonne A est triée par ordre croissant.

    Mon astuce est que je teste si la cellule active est différente de la cellule du bas alors je considère que la cellule active est unique donc la colonne E = "0" sinon E ="-1".
    Le problème c'est que si dans une colonne A j'ai 3 valeurs identiques, le dernier élément identique est comparé avec un l’élément suivant donc forcément , mon code le traitement comme unique et lui affecte la la valeur 0. comme sur la figure ci-dessous

    En bref:

    je souhaite souhaite que si la valeur de la colonne A est unique alors la colonne E ="0" sinon E="-1".

    A | B | C | D | E
    ------------------------------------------------------
    a | _ | _ | _ | -1
    a | _ | _ | _ | -1
    a | _ | _ | _ | 0
    c | _ | _ | _ | 0




    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
    Sub Test()
     
      numrows = Range("A2", Range("A2").End(xlDown)).Rows.Count
     
        With Range("A2")
             .Select
             .NumberFormat = "@"
       End With   
     
    Range("E2").Select
     
        ' si cellule active différente de celle du bas
        For i = 1 To numrows
            If ActiveCell.Offset(0, -4).Value <> ActiveCell.Offset(1, -4).Value Then
                ActiveCell.NumberFormat = "@"
                ActiveCell.Value = "0"
            Else
                ActiveCell.NumberFormat = "@"
                ActiveCell.Value = "-1"
            End If
            ActiveCell.Offset(1, 0).Select
        Next
     
        With Range("E2")
            .Select
            .NumberFormat = "@"
        End With
     
        Next
    End Sub
    merci de votre aide

    Henri

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Le problème peut être résolu par une formule dans la colonne E. On peut entrer la formule suivante en A2, puis la tirer vers le bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI(A:A;A2)=1;0;-1)

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
    Dim NumRows As Long
    Dim Plage As Range, C As Range
        NumRows = Range("A2", Range("A2").End(xlDown)).Rows.Count
        Set Plage = Range("A2:A" & NumRows)
        For Each C In Plage
            If Application.CountIf(Plage, C.Value) > 1 Then
                C.Offset(0, 4) = "-1"
            Else
                C.Offset(0, 4) = "0"
            End If
        Next C
        Set Plage = Nothing
    End Sub
    Cordialement.

  4. #4
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Par défaut
    Bonjour gFZT82,

    je te remercie infiniment.
    ton code marche sans aucune adaptation .
    je craignais que mon énoncé ne soit pas très clair.

    merci encore.



    Cordialement,

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

Discussions similaires

  1. Insertion de cellule et décalage des controls
    Par Uranne-jimmy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/01/2015, 14h43
  2. [C#] Gestion des cellules d'une DataGridViewComboBoxColumn séparement
    Par playmobil-62 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/07/2011, 09h59
  3. Réponses: 8
    Dernier message: 22/12/2009, 16h20
  4. [JTable]Aligner le contenu des cellules
    Par )3lade dans le forum Composants
    Réponses: 2
    Dernier message: 09/03/2004, 13h24
  5. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37

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