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 :

comparaison de liste dans un classeur excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut comparaison de liste dans un classeur excel
    Bonjour
    Voila je suis confronté à un probleme bizarre.
    En fait mon programme compare deux listes d'un meme classeur excel.
    Si pour un meme code client, on a une valeur de la colonne "atc" qui est differentes alors on la marque à 1.
    voici ma macro
    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
     
    Sub tris_atc()
     
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim j1 As Integer
     
    i = lignevide(1, 1) 'nombre de lignes vide en debut de fichier, entete = ligne vide
    j = lignevide(1, 2)
     
    k = nbrligne(i, 1)
    l = nbrligne(j, 2)
     
    i = i + 1 'on saute le nombre de ligne vide pour se placer sur la premiere ligne effective
    j = j + 1
    j1 = j
    'parcour de la 1er feuille
    While i < k
     
         Worksheets(1).Cells(i, 1).NumberFormat = "@" 'on convertie les données en texte
         Worksheets(1).Cells(i, 1) = "000" & Cells(i, 1).Value 'rajout des 000 pour avoir la meme mise en forme que le feuille2
         Worksheets(1).Cells(i, 3).NumberFormat = "@"
         If Worksheets(1).Cells(i, 3) < 10 Then 'rajout des 0 au code atc
            Worksheets(1).Cells(i, 3) = "00" & Cells(i, 3).Value
         ElseIf Worksheets(1).Cells(i, 3) > 10 And Worksheets(1).Cells(i, 3) < 100 Then
            Worksheets(1).Cells(i, 3) = "0" & Cells(i, 3)
         End If
     
    'parcour de la 2ieme feuille
      For j = j1 To l
      'si pour le meme code on a des atc differents alors on inscrit 1 dans la colonne "E"
            If Worksheets(1).Cells(i, 1) = Worksheets(2).Cells(j, 2) Then 'comparaison code client
                If Worksheets(1).Cells(i, 3) <> Worksheets(2).Cells(j, 1) Then 'comparaison code atc
                Worksheets(2).Range("E" & j) = 1 'inscription de la velaur 1 dans la colonne E
                Worksheets(2).Range("F" & j) = Worksheets(1).Cells(i, 3).Value 'rappel du code atc de la premiere feuille
                j1 = j 'on repart de la ou on s'est arreté car code classé dans orde croissant
                Exit For
                End If
                j1 = j
                Exit For
            End If
     
      Next
            i = i + 1 'on passe a la ligne suivante de la premiere feuille.
     
     Wend
     
     
    End Sub
    Le probleme survient lorsque la valeur atc est > 100.
    Alors on a beau avoir les deux memes valeurs pour un meme code client (110 par exemple), excel considere que ce sont des valeurs differentes et les marques à 1

    Voila si quelqu'un voit le probleme qu'il n'hesite pas car la je suis perdu.
    Merci

  2. #2
    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
    Déjà tu peux supprimer deux source de confusion : L'une de tes cellules peut contenir un espace, les caractères peuvent être dans une casse différente (Maj/min). Pour y remédier, tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If Trim(Ucase(Worksheets(1).Cells(i, 3))) = _
              Trim(Ucase(Worksheets(2).Cells(j, 1))) Then 'comparaison code client
    Naturellement ceci n'est valable que sur les chaînes de caractères, non sur les nombres.
    A tout hasard...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    J'ai trouvé le probleme mais je n'ai pas de solution pour le moment.
    En fait lorsque l'on a un code atc >100 on le converti en texte mais on ajoute aucun 0.
    Et en fait pour que la cellule soit vraiment passée au format texte il faudrait la revalider (en manuel se mettre dessus et faire un doucle click).
    comment faire ça en vba.

  4. #4
    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
    Tu aurais intérêt à utiliser cette formule pour formater systématiquement toutes tes valeurs, y compris les valeurs > 99
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Worksheets(1).Cells(i, 3) = Right("000" & Cells(i, 3).Value,3)
    Ce qui supprime ton if et ton Elseif
    Bonne journée

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Merci
    j'avais deja essayé cette methode et j'avais vu que ca marchait cependant le resultat ne me convenait pas, le fait est qu'il ne faut pas que j'ai des "0" pour les valeures > 100.

    Mais j'ai testé ta soltuion avec la fonction "trim" et ca marche, je ne saurais pas te dire pourquoi mais bon l'essentiel c'est que ca fonctionne.
    Je pense que ca doit recalculer la cellule et la mettre en texte.


    En tout cas merci je n'aurait pas penser a cela.

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

Discussions similaires

  1. [XL-2007] Récupérer le nom dans une liste d'un classeur Excel
    Par lbroc84 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/12/2011, 11h51
  2. Réponses: 1
    Dernier message: 04/06/2006, 16h08
  3. [VBA-E]Existence d'une feuille dans un classeur EXCEL
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/04/2006, 15h58
  4. VB6 : création de feuilles dans un classeur Excel
    Par getea85 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/11/2005, 16h37
  5. Changer de feuille dans un classeur Excel
    Par couiss dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 09/05/2005, 10h05

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