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 :

Trouver si une valeur existe déjà dans le classeur [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 92
    Par défaut Trouver si une valeur existe déjà dans le classeur
    Bonjour,
    Voila j'ai 3 colonnes :
    1- nom clients
    2- mois
    3- chiffre d'affaires

    Dans une 4ème colonne je reprends le nom du client + le mois (ex. : dupont1 pour le mois de janvier, dupont2 pour le mois de fèvrier...).
    Sauf que parfois il existe deux clients qui ont le même nom et si cela se produit j'aimerais que dans la 4ème colonne je rajoute un numéro qui puisse les distinguer.
    Par exemple, si il y a 4 dupont je voudrais que dans la 4ème colonne pour le mois de janvier j'ai cela :
    dupont11
    dupont12
    dupont13
    dupont14

    j'ai essayé de jouer une macro mais elle ne fonctionne pas et j'aimerais passer par une fonction si mais la seul que j'ai trouvé c'est NB.SI qui ne fonctionne qu'avec des valeurs numériques.

  2. #2
    Membre émérite
    Homme Profil pro
    Contrôleur de gestion en activité
    Inscrit en
    Juillet 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Contrôleur de gestion en activité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 545
    Par défaut
    Bonjour,

    il y a une solution qui consiste à passer par les formules matricielles.
    je ne sais pas si tu connais ce type de formules...

    en bref, place toi sur la dernière ligne de ton tableau en colonne D (dans mon exemple, la ligne 20), puis colle ce texte =A20&B20&SOMME(SI($A$3:A20=A20;1;0)) et fais Ctrl+majuscules+entrée pour finir la saisie de la matricielle. des symboles { et } devront apparaitre dans la barre de formules.
    recopie ensuite la fomules vers le haut du tableau.
    voila

    sinon il y a les somme.si plus classiques mais il faut ajouter une colonne.

    Il y a aussi le vba, mais comme il te fallait en priorité une formule...

    Au plaisir.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 158
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai essayé de jouer une macro mais elle ne fonctionne pas et j'aimerais passer par une fonction si mais la seul que j'ai trouvé c'est NB.SI qui ne fonctionne qu'avec des valeurs numériques.
    NB.SI compte le nombre de cellules répondant à une condition, tu peux parfaitement l'utiliser pour ton cas.
    Petit exemple ici
    En colonne A, (A2:A15) le nom, en cellule B2 et suivante, cette formule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =A2 & NB.SI(A2:$A$15;A2)
    La référence absolue dans la formule uniquement sur la borne supérieure (A2:$A$15).
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    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,

    Une variante avec VBA.
    Avec le nom en colonne A et le mois en colonne B, le résultat obtenu en colonne D est de la forme :
    Dupont1-01
    Dupont1-02
    Dupont1-03
    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
    Option Explicit
    Sub Test()
    Dim Cel As Range, MaPlage As Range
    Dim Col As Collection
    Dim DerLig As Long, i As Long, j As Long
    Dim Nom As String
    Dim Cptr As Integer
        Application.ScreenUpdating = False
        With Worksheets("Feuil1")
            Set Col = New Collection
            On Error Resume Next
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
            Set MaPlage = .Range("A2:A" & DerLig)
            For Each Cel In MaPlage
                Nom = Cel & Cel.Offset(0, 1)
                If Nom <> "" Then Col.Add Nom, CStr(Nom)
            Next Cel
            On Error GoTo 0
            For i = 1 To Col.Count
                Cptr = 1
                For j = 1 To DerLig
                    If .Cells(j, 1) & .Cells(j, 2) = Col.Item(i) Then
                        .Cells(j, 4) = Col.Item(i) & "-" & Format(CStr(Cptr), "00")
                        Cptr = Cptr + 1
                    End If
                Next j
            Next i
        End With
        Application.ScreenUpdating = True
        Set MaPlage = Nothing
        Set Col = Nothing
    End Sub
    Cordialement.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 92
    Par défaut
    Merci à vous tous pour votre aide... en combinant un peu de chaque ca marche parfait

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

Discussions similaires

  1. trouver si une valeur est contenue dans ObservableCollection
    Par Golzinne dans le forum Silverlight
    Réponses: 3
    Dernier message: 25/01/2012, 10h08
  2. [MySQL] Condition pour tester si une valeur existe déjà dans la base
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/04/2008, 10h22
  3. Fonction de contrôle si une valeur existe dans une Array
    Par DMadzar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/08/2007, 11h35
  4. test si une valeur existe dans un tableau
    Par Maria1505 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 15/08/2007, 17h10
  5. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01

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