Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA et DO UNTILL

3 réponses
Avatar
Françoise
Bonjour à tous,

je fais une macro qui va dans un classeur "STOCK"
sur une feuille "SORTIES"
qui cherche dans la colonne J la valeur RETRAIT
à chaque fois qu'il y a cette valeur dans la col J,
je sélectionne la ligne entière
je la copie sur la dernière ligne de la feuille LIGNES RESA HORS STOCK
je reviens sur la feuille "SORTIES"
je supprime la ligne sélectionnée
ET
je passe à la suivante pour faire le même travail

avec ma macro dont code ci-dessous, elle supprime bien toutes les lignes sur
lesquelles elle trouve RETRAIT dans la colonne J
MAIS
elle copie uniquement la dernière ligne trouvée dans la feuille LIGNES RESA
HORS STOCK
===========================
voici le code :
===========================
Sub Verif_Refs_Stock()

Windows("STOCK.XLS").Activate
Dim Derlig As Long

With Sheets("LIGNES RESA HORS STOCK")
Derlig = .range("A65536").End(xlUp)(2).Row
range("A" & Derlig).Select
End With

Sheets("SORTIES").Select
range("J2").Select
Dim rg As range
With Worksheets("SORTIES")
Set rg = .range("J2:J" & .range("J65536").End(xlUp).Row)
End With

Do Until ActiveCell = ""
If ActiveCell = "RETRAIT" Then
Selection.EntireRow.Copy
Sheets("LIGNES RESA HORS STOCK").Select
range("A" & Derlig).Select
ActiveSheet.Paste
Sheets("SORTIES").Select
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).range("A1").Select
End If
Loop
End Sub
=============================================
Une petite idée sur ce qui se passe ?????
d'avance merci à tous

3 réponses

Avatar
LSteph
Bonjour,

(HS eviter les gesticu-select-ations inutiles e:range("A" &
Derlig).Select)

Donc tu as défini d'avance Derlig la dernière ligne, sauf que dans la
suite de ton code tu boucle toujours sur la même
alors qu'il y en a une de plus à chaque tour. A la fin de l'execution
tu lis donc la dernière copie seulement.
Par ailleurs comme pour supprimer faut toujours remonter je te propose
de copier insérer en boucle for i ..to 1step-1

'''''
Sub Verif_Refs_Stock()

Dim myplg As Range, derlig As Long, i As Long

'Windows("STOCK.XLS").Activate
'-----remets cidessus ci necessaire

With Sheets("SORTIES")
Set myplg = .Range("J2:J" & .Range("J65536").End(xlUp).Row)
End With
derlig = Sheets("LIGNES RESA HORS STOCK").[a65536].End(xlUp)(2).Row

For i = myplg.Rows.Count To 1 Step -1
With myplg.Cells(i)
If UCase(.Text) = "RETRAIT" Then
.EntireRow.Copy
Sheets("LIGNES RESA HORS STOCK").Rows(derlig).Insert Shift:=xlDown
.EntireRow.Delete
End If
End With
Next
End Sub

'--
'LSteph




On 29 avr, 16:56, Françoise
wrote:
Bonjour à tous,

je fais une macro qui va dans un classeur "STOCK"
sur une feuille "SORTIES"
qui cherche dans la colonne J la valeur RETRAIT
à chaque fois qu'il y a cette valeur dans la col J,
je sélectionne la ligne entière
je la copie sur la dernière ligne de la feuille LIGNES RESA HORS STOCK
je reviens sur la feuille "SORTIES"
je supprime la ligne sélectionnée
ET
je passe à la suivante pour faire le même travail

avec ma macro dont code ci-dessous, elle supprime bien toutes les lignes sur
lesquelles elle trouve RETRAIT dans la colonne J
MAIS
elle copie uniquement la dernière ligne trouvée dans la feuille LIGNE S RESA
HORS STOCK
======================== ===
voici le code :
======================== ===
Sub Verif_Refs_Stock()

Windows("STOCK.XLS").Activate
Dim Derlig As Long

With Sheets("LIGNES RESA HORS STOCK")
Derlig = .range("A65536").End(xlUp)(2).Row
range("A" & Derlig).Select
End With

Sheets("SORTIES").Select
range("J2").Select
Dim rg As range
With Worksheets("SORTIES")
    Set rg = .range("J2:J" & .range("J65536").End(xlUp).Row)
End With

Do Until ActiveCell = ""
If ActiveCell = "RETRAIT" Then
Selection.EntireRow.Copy
Sheets("LIGNES RESA HORS STOCK").Select
range("A" & Derlig).Select
ActiveSheet.Paste
Sheets("SORTIES").Select
Selection.EntireRow.Delete
Else
  ActiveCell.Offset(1, 0).range("A1").Select
End If
Loop
End Sub
======================== =====================
Une petite idée sur ce qui se passe ?????
d'avance merci à tous
Avatar
tfj57
Bonjour,

Après le ActiveSheet.Paste, il faudrait incrémenter la variable Derlig pour
passer à la ligne suivante.

Salutations

François


"Françoise" a écrit dans le message de
news:
Bonjour à tous,

je fais une macro qui va dans un classeur "STOCK"
sur une feuille "SORTIES"
qui cherche dans la colonne J la valeur RETRAIT
à chaque fois qu'il y a cette valeur dans la col J,
je sélectionne la ligne entière
je la copie sur la dernière ligne de la feuille LIGNES RESA HORS STOCK
je reviens sur la feuille "SORTIES"
je supprime la ligne sélectionnée
ET
je passe à la suivante pour faire le même travail

avec ma macro dont code ci-dessous, elle supprime bien toutes les lignes
sur
lesquelles elle trouve RETRAIT dans la colonne J
MAIS
elle copie uniquement la dernière ligne trouvée dans la feuille LIGNES
RESA
HORS STOCK
========================== > voici le code :
========================== > Sub Verif_Refs_Stock()

Windows("STOCK.XLS").Activate
Dim Derlig As Long

With Sheets("LIGNES RESA HORS STOCK")
Derlig = .range("A65536").End(xlUp)(2).Row
range("A" & Derlig).Select
End With

Sheets("SORTIES").Select
range("J2").Select
Dim rg As range
With Worksheets("SORTIES")
Set rg = .range("J2:J" & .range("J65536").End(xlUp).Row)
End With

Do Until ActiveCell = ""
If ActiveCell = "RETRAIT" Then
Selection.EntireRow.Copy
Sheets("LIGNES RESA HORS STOCK").Select
range("A" & Derlig).Select
ActiveSheet.Paste
Sheets("SORTIES").Select
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).range("A1").Select
End If
Loop
End Sub
============================================ > Une petite idée sur ce qui se passe ?????
d'avance merci à tous



Avatar
Françoise
Merci beaucoup, c'est parfait, j'ai compris le problème
merci à tous les deux pour votre aide

"LSteph" a écrit :

Bonjour,

(HS eviter les gesticu-select-ations inutiles e:range("A" &
Derlig).Select)

Donc tu as défini d'avance Derlig la dernière ligne, sauf que dans la
suite de ton code tu boucle toujours sur la même
alors qu'il y en a une de plus à chaque tour. A la fin de l'execution
tu lis donc la dernière copie seulement.
Par ailleurs comme pour supprimer faut toujours remonter je te propose
de copier insérer en boucle for i ..to 1step-1

'''''
Sub Verif_Refs_Stock()

Dim myplg As Range, derlig As Long, i As Long

'Windows("STOCK.XLS").Activate
'-----remets cidessus ci necessaire

With Sheets("SORTIES")
Set myplg = .Range("J2:J" & .Range("J65536").End(xlUp).Row)
End With
derlig = Sheets("LIGNES RESA HORS STOCK").[a65536].End(xlUp)(2).Row

For i = myplg.Rows.Count To 1 Step -1
With myplg.Cells(i)
If UCase(.Text) = "RETRAIT" Then
.EntireRow.Copy
Sheets("LIGNES RESA HORS STOCK").Rows(derlig).Insert Shift:=xlDown
.EntireRow.Delete
End If
End With
Next
End Sub

'--
'LSteph




On 29 avr, 16:56, Françoise
wrote:
> Bonjour à tous,
>
> je fais une macro qui va dans un classeur "STOCK"
> sur une feuille "SORTIES"
> qui cherche dans la colonne J la valeur RETRAIT
> à chaque fois qu'il y a cette valeur dans la col J,
> je sélectionne la ligne entière
> je la copie sur la dernière ligne de la feuille LIGNES RESA HORS STOCK
> je reviens sur la feuille "SORTIES"
> je supprime la ligne sélectionnée
> ET
> je passe à la suivante pour faire le même travail
>
> avec ma macro dont code ci-dessous, elle supprime bien toutes les lignes sur
> lesquelles elle trouve RETRAIT dans la colonne J
> MAIS
> elle copie uniquement la dernière ligne trouvée dans la feuille LIGNES RESA
> HORS STOCK
> ========================== > > voici le code :
> ========================== > > Sub Verif_Refs_Stock()
>
> Windows("STOCK.XLS").Activate
> Dim Derlig As Long
>
> With Sheets("LIGNES RESA HORS STOCK")
> Derlig = .range("A65536").End(xlUp)(2).Row
> range("A" & Derlig).Select
> End With
>
> Sheets("SORTIES").Select
> range("J2").Select
> Dim rg As range
> With Worksheets("SORTIES")
> Set rg = .range("J2:J" & .range("J65536").End(xlUp).Row)
> End With
>
> Do Until ActiveCell = ""
> If ActiveCell = "RETRAIT" Then
> Selection.EntireRow.Copy
> Sheets("LIGNES RESA HORS STOCK").Select
> range("A" & Derlig).Select
> ActiveSheet.Paste
> Sheets("SORTIES").Select
> Selection.EntireRow.Delete
> Else
> ActiveCell.Offset(1, 0).range("A1").Select
> End If
> Loop
> End Sub
> ============================================ > > Une petite idée sur ce qui se passe ?????
> d'avance merci à tous

.