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 :

Changer format et comparaison valeur entre plusieurs plages [XL-2010]


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
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut Changer format et comparaison valeur entre plusieurs plages
    Bonjour à tous,

    Je cherche à comparer mes valeurs se trouvant dans la colonne A de la feuille Test avec la colonne A des feuilles Colis Vides et Archives. Si excel trouve la valeur dans l'une de ces colonnes, il doit supprimer la ligne entière. J'ai tenté d'adapter un code à mon classeur mais cela ne fonctionne pas (ci-dessous le code).
    D'autre part, je souhaiterais modifier le format de la colonne A avant l'exécution de la macro (les cellules devraient passer au format fraction. Cela semble simple mais je n'y parviens pas.

    Quelqu'un aurait-il une solution pour ces deux problématiques ? Par avance un grand merci.

    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
    Sub Compare()
      Dim i As Integer
      Dim col_1 As Range
      Dim col_2 As Range
     
      'Definition plages de cellules dans lesquelles je dois rechercher ma valeur
      Set col_1 = Worksheets("Colis_Vides").Range("A1:A1000")
      Set col_2 = Worksheets("Archives").Range("A1:A1000")
     
     
      With ThisWorkbook.Sheets("Test")
        For i = 50 To 2 Step -1
          'Test si ma valeur est présente dans la colonne A de la feuille colis vides et dans la colonne A de la feuille archives
          If (Application.CountIf(col_1, .Range("A" & i).Value) = 0) Or (Application.CountIf(col_2, .Range("A" & i).Value) = 0) Then
          Rows(i).Delete 'effacer la ligne contenant ma valeur si elle est trouvée dans l'une des deux plages
          End If
         Next i
      End With
     
      MsgBox ("Les données ont été triées !")
     
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par dad76600 Voir le message
    Si excel trouve la valeur dans l'une de ces colonnes, il doit supprimer la ligne entière.
    Il doit la supprimer dans la feuille Test ou dans les autres ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut
    Merci pour ta réponse.

    Il doit la supprimer dans la feuille test car j'ai une seconde macro qui doit ensuite copier les lignes encore présentes dans la feuille test vers la feuille colis vides.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut
    "Problème" résolu !

    Par l'enregistreur de macro pour la modification du format.

    Et en remplaçant 0 par 1 dans le code pour le test sur les plages à vérifier. Je remet le code fonctionnel ci-dessous si cela peut aider quelqu'un par la suite et met en résolu.

    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
    Sub Compare()
      Dim i As Integer
      Dim col_1 As Range
      Dim col_2 As Range
     
      'Definition plages de cellules dans lesquelles je dois rechercher ma valeur
      Set col_1 = Worksheets("Colis_Vides").Range("A1:A1000")
      Set col_2 = Worksheets("Archives").Range("A1:A1000")
     
     
      With ThisWorkbook.Sheets("Test")
        For i = 50 To 2 Step -1
          'Test si ma valeur est présente dans la colonne A de la feuille colis vides et dans la colonne A de la feuille archives
          If (Application.CountIf(col_1, .Range("A" & i).Value) = 1) Or (Application.CountIf(col_2, .Range("A" & i).Value) = 1) Then
          Rows(i).Delete 'effacer la ligne contenant ma valeur si elle est trouvée dans l'une des deux plages
          End If
         Next i
      End With
     
      MsgBox ("Les données ont été triées !")
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 16
    Par défaut
    Bonsoir à tous,

    En fait avec des données réelles, cela ne fonctionne pas. Si quelqu'un peut m'aider, ce serait très sympa !


    Merci par avance.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ça fonctionne pas ... mais encore ? Un message d'erreur ou un comportement inattendu ? Explique !


    au passage, ligne 15 du code

    rajoute un point devant Rows(i) pour être assuré que la suppression s'effectue sur la feuille Test (actuellement c'est sur la feuille active)

    de plus ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Test si ma valeur est présente dans la colonne A de la feuille colis vides et dans la colonne A de la feuille archives
          If (Application.CountIf(col_1, .Range("A" & i).Value) = 1) Or (Application.CountIf(col_2, .Range("A" & i).Value) = 1) Then
    Ton commentaire parle d'un "ET" et tu utilises un opérateur "OU" dans ton If ... corrige ton commentaire pour que ce soit raccord
    Et y'a un problème de cohérence dans le test des countif, par exemple s'il y a deux fois la valeur dans ta colonne A d'une feuille, et rien dans l'autre ... la suppression ne se fera pas
    j'aurai plutôt opté pour > 0 .... et probablement additionné les deux countif et testé si c'est > 0 afin d'éviter le Or (gain de temps et de ressources)

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

Discussions similaires

  1. comparaison valeurs entre deux fichiers texte
    Par seb-65 dans le forum Langage
    Réponses: 8
    Dernier message: 18/12/2013, 13h46
  2. Réponses: 2
    Dernier message: 17/11/2013, 18h59
  3. Routage réseau entre plusieurs plages IP
    Par Unkof dans le forum Hardware
    Réponses: 2
    Dernier message: 01/09/2011, 17h12
  4. cocher une case en fonction des valeurs sur plusieurs plages
    Par flyfranky dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 15/11/2007, 10h20
  5. Réponses: 1
    Dernier message: 01/11/2006, 19h20

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