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 :

[VBA-E] Pb Comparaison De Deux Colonnes Avec Fonction If


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Enseignant
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [VBA-E] Pb Comparaison De Deux Colonnes Avec Fonction If
    bonjour, j'ai un gros soucis. Je connais pas grand chose en VBA et ma pile de bouquin ne m'aide pas, je sature. Voila, Imaginons 3 colonnes A,B et C. Je veux comparer les valeurs des colonnes B et C. SI une cellule de B est < à C alors la cellule de la colonne A correspondante est copiée dans une nouvelle feuille.Cette copie est effectué dans une colonne et les cellules seront situé les unes en dessous des autres. Pour l'instant, avec la macro que j'ai rédiger, je n'obtiens la copie d'une seule cellule et de plus, quelquesoit le résultat de la comparaison. Je suppose que je vais etre obliger d'utiliser une fonction FOR NEXT, pour créer une boucle. Pouvez vous m'aidez a corriger mes erreurs et me proposer une solution pour créer ma boucle? merci d'avance pour votre aide.
    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
    'Creation Alerte
    Sub Recherche_stock_mini_dépassé()
    Sheets("MagasinT").Activate
    Range("A3").Select
    Do Until ActiveCell.Value = ""
    Pp = ActiveCell.Value
    Stock_dispopp = ActiveCell.Offset(0, 2).Value
    Stock_minipp = ActiveCell.Offset(0, 3).Value
    If Stock_dispopp <= Stock_minipp Then
     
        Sheets("Alerte stock").Activate
        Range("A3").Select
     
        Do Until ActiveCell.Value = ""
        ActiveCell.Offset(1, 0).Select
        Loop
        ActiveCell.Value = Pp
     
    End If
    ActiveCell.Offset(1, 0).Select
     
    Loop
    Sheets("Interface").Activate
    End Sub
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    tu n'étais vraiment pas loin
    J'ai corrigé pour qu'il revienne sur la première feuille... Je connais pas trop le OffSet mais j'espère que de la manière que tu l'utilises, cela veut bien dire avancer sur la ligne suivante sinon tu risques de boucler indéfiniement

    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
     
    'Creation Alerte
    Sub Recherche_stock_mini_dépassé()
    Sheets("MagasinT").Activate
    Range("A3").Select
    Do Until ActiveCell.Value = ""
    Pp = ActiveCell.Value
    Stock_dispopp = ActiveCell.Offset(0, 2).Value
    Stock_minipp = ActiveCell.Offset(0, 3).Value
    If Stock_dispopp <= Stock_minipp Then
     
        Sheets("Alerte stock").Activate
        Range("A3").Select
     
        Do Until ActiveCell.Value = ""
        ActiveCell.Offset(1, 0).Select
        Loop
        ActiveCell.Value = Pp
     
    End If
    Sheets("MagasinT").Activate
    ActiveCell.Offset(1, 0).Select
     
    Loop
    Sheets("Interface").Activate
    End Sub

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Une manière un peu plus "propre" de travailler:
    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
    Option Explicit
     
    'Creation Alerte
    Sub Recherche_stock_mini_dépassé()
      Dim rCellDest As Range
      Dim rCellOri As Range
      Dim rRange As Range
      Dim Stock_dispopp As Integer
      Dim Stock_minipp As Integer
      Dim wksMaga As Worksheet
      Dim wksAlerte As Worksheet
      Set wksMaga = Sheets("MagasinT")
      Set wksAlerte = Sheets("Alerte stock")
      If IsEmpty(wksAlerte.[A3]) Then
        Set rCellDest = wksAlerte.[A3]
      Else
        Set rCellDest = wksAlerte.[A3].End(xlDown).Offset(1, 0)
      End If
      Set rRange = Range(wksMaga.[A3], wksMaga.[A3].End(xlDown))
      For Each rCellOri In rRange
        If rCellOri.Offset(0, 2).Value <= rCellOri.Offset(0, 3).Value Then
          rCellDest = rCellOri
          Set rCellDest = rCellDest.Offset(1, 0)
        End If
      Next rCellOri
      Sheets("Interface").Activate
    End Sub

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Sauf que du coup tout son code a été récrit
    Je trouve çà plus sympa pour lui de lui laisser son code poru qu'il s'y retrouve et juste le corriger

    Sinon, il va récupérer un code qui n'est pas le sien, donc pas forcément compréhensible car pas dans la même logique
    C'est jsute mon opinion

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    En partie d'accord avec toi mais...

    • Utiliser les Select et Activate pose pas mal de problèmes.
    • Montrer à quelqu'un qu'il existe une autre façon de travailler n'est jamais mauvais. Le risque, évidemment, est que le posteur fasse un "bête" copier/coller du code fourni.
    • Le fait que tu as montré une possibilité et moi une autre, donne le choix au posteur.
    • Il est important, surtout à cette époque où la plupart des langages sont orientés objet et les langages "traditionnels" en voie de disparition, de penser objet le plus possible.

    Bref, si je me suis permis de poster cette solution complète (et ce n'est pas mon habitude), c'est parce que tu avais donné une réponse au problème rencontré.
    J'en ai profité pour donner un autre éclairage.

  6. #6
    Futur Membre du Club
    Profil pro
    Enseignant
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut comparaison deux colonnes
    merci à vous deux pour vos réponses. Le fait de voir deux codes différents à pousser ma réflexion.Pour recopier mes lignes les unes en dessous ds autres,j'ai appliqué la méthode d'helios77.Désolé alaintech,mais je ne comprenais pas bien ton code et j'avais une erreur(que je n'arrivais pas à corriger) quand je l'ai appliqué.Par contre, tu m'as davantage sensibiliser sur ma fonction "if" avec l'emploi de la boucle For each next.Pourriez vous m'indiquer la différence entre le "do until...loop" et le for each .... next. La mon probleme est que ma fonction "if" n'est pas reconnu et que par conséquent,toutes mes cellules de la première colonne sont recopiées.

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    La boucle For Each objet In collection va parcourir tous les objets de la collection.
    Dans ce cas-ci, la collection est un range, donc une collection de cellules.
    Nous parcourons donc toutes les cellules du range.
    Dans l'exemple, rCellOri (ou rCellDest), est une cellule, nous pouvons donc la manipuler exactement comme ActiveCell. Lire ou positionner ses propriétés ou lui appliquer des méthodes.

    Pour le If, je me suis basé sur ton code et pas ta description.
    Dans la description, tu dis que les valeurs sont dans les colonnes B et C alors que dans le code, tu les lis en C (Offset de 2 par rapport à A) et D (Offset de 3).

    Pour les lire en B et C, change la condition du If comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If rCellOri.Offset(0, 1).Value <= rCellOri.Offset(0, 2).Value Then

Discussions similaires

  1. Insérer un champ dans deux colonnes (avec fonction)
    Par tjacqmain dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 13/03/2012, 09h29
  2. concaténer deux colonnes avec séparateur ', '
    Par briceg dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 23/10/2009, 11h33
  3. Réponses: 26
    Dernier message: 21/01/2009, 08h32
  4. Réponses: 4
    Dernier message: 05/06/2008, 09h51
  5. Comparaison de deux colonnes
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/02/2008, 19h18

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