JOAN618
Messages postés7Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention21 mars 2007
-
21 mars 2007 à 16:42
gagette
Messages postés6Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention22 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
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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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>
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
gagette
Messages postés6Date d'inscriptionvendredi 27 février 2004StatutMembreDernière intervention22 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 !