PB comparaison de cellules dans deux colonnes

JOAN618 Messages postés 7 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007 - 21 mars 2007 à 16:42
gagette Messages postés 6 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 22 mars 2007 - 22 mars 2007 à 11:57
Bonjour, voila je suis entrain de crerr une base de donnée pour mon atelier de productique. J'y connais pas grand chose en VBA et je me retrouve bloquer.J'ai besoin de comparer Deux colonnes Et je n'y arrive pas.Je m'explique:
Nous avons 3 colonnes: A , B et C. Je dois comparer les colonnes B et C. Si une valeur d'une cellule de la colonne B est < à celle de la colonne C, Alors le contenu de la cellule A est copié dans une autre feuille. Et ainsi de suite, les unes en dessous des autres. J'ai ecris une macro:
##

'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



##


En executant cette macro, la cellule est copié automatiquement dans l'autre feuille quelquesoit le résultat d la comparaison.
Je n'arrive pas à créer une boucle pour que les copies de cellule se fassent les unes en dessous des autres.




 






GROMORICE

3 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mars 2007 à 16:53
Salut,

je pense qu'il y a plus simple :

Dim i As Long

For i = 3 To 100   'change 100 au besoin
   If Range("B" & i).Value < Range("C" & i).Value Then Sheets("Alerte Stock").Range("A" & i).Value = Range("A" & i).Value
Next i

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mars 2007 à 17:02
Salut,
Ou alors plus complique  (salut [auteurdetail.aspx?ID=647037 mortalino])

Private Sub CommandButton1_Click()
Call Recherche_Stock_Depasse(ActiveWorkbook.Worksheets("MagasinT"), ActiveWorkbook.Worksheets("Alerte stock"))
Call Worksheets("Interface").Activate
End Sub<hr />'Creation Alerte NB: les accents hors commentaire c'est pas top
'Sub Recherche_stock_mini_dépassé()
Private Sub Recherche_Stock_Depasse(WSSource As Worksheet, WSDestination As Worksheet)
Dim NumLigne As Long
Dim NumLigneDest As Long
Dim Stock_dispopp As Integer
Dim Stock_minipp As Integer
   'On Commence à la 3 ème ligne
   NumLigne = 3
   NumLigneDest = 3
   'On selectionne A3 de la feuille source
   WSSource.Activate
   WSSource.Range("A" & CStr(NumLigne)).Select
   'Tant qu'il y aune  valeur dans la cellule de la colonne A
   While Not ActiveCell.Text = ""
       'Recupération de la valeur en colonne B
       Stock_dispopp = WSSource.Range("B" & CStr(NumLigne)).Value
       'Recupération de la valeur en colonne C
       Stock_minipp = WSSource.Range("C" & CStr(NumLigne)).Value
       'Si les dispo < mini
       If Stock_dispopp < Stock_minipp Then
           WSDestination.Range("A" & NumLigneDest).Value = ActiveCell.Value
           'incremente la ligne de destination
           NumLigneDest = NumLigne + 1
       End If
       'Incrementation numéro de ligne source
       NumLigne = NumLigne + 1
       WSSource.Activate
       WSSource.Range("A" & CStr(NumLigne)).Select
   Wend
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
gagette Messages postés 6 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 22 mars 2007
22 mars 2007 à 11:57
Essaye ça: les cellules copiées sur ta feuille "Alerte stock" le seront à la suite les unes des autres !

Dim i As Integer 'déclarations
Dim j As Integer





i = 0




'incrémentation sur la feuille "MagasinT"
j = 0 'incrémentation sur la feuille "Alerte stock"








'on parcourt toutes les lignes où la cellule de la colonne A n'est pas vide
While Sheets("MagasinT").Range("A3").Offset(i, 0).Value <> vbNullString
   
  




  'si valeur de cellule en colonne "B" <= valeur de cellule en colonne "C"
    If Sheets("MagasinT").Range("A3").Offset(i, 1).Value <= Sheets("MagasinT").Range("A3").Offset(i, 2).Value Then
       
       



'on reporte la valeur sur la feuille "alerte stock" à la suite de la dernière cellule vide
        Sheets("Alerte stock").Range("A3").Offset(j, 0).Value = Sheets("MagasinT").Range("A3").Offset(i, 0).Value
       
        j = j + 1



'on descend d'une ligne sur la feuille d'alerte !
    End If
    i = i + 1 'ligne suivante de la feuille "MagasinT"
Wend






Si tu peux, évite les "select" et "activate" dans VBA, remplace les par des "offset( , )". Les "select" et "activate" demande une mise à jour de l'affichage, ce qui ralenti considérablement ton application, alors que j'en suis sûr, la plupart du temps tu n'as pas besoin d'un affichage mis à jour en temps réel !




Gagette
0
Rejoignez-nous