Fichier palettier

Bonjour tout le monde,

Je travaille actuellement sur un fichier pour la gestion de stock de notre palettier. Je voudrais savoir s'il y a une macro qui peut me permettre de transférer une ligne entière (dans l'onglet JOURNAL) dans un autre onglet (Feuil2) , dès que dans la colonne I (Statut) on saisi le mot "CS OUT".

Je n'arrive pas à trouver une solution...

Cordialement,

Bonjour, salut Bruno !

Pour compléter, voilà un code possible à placer dans le module VBA de la feuille JOURNAL :

Private Sub Worksheet_Change(ByVal Target As Range)

With Sheets("Feuil2") 'Tout ce qui commence par un "." se rapporte à cette feuille, nom feuille à adapter si besoin
    If Not Intersect(Target, Range("I:I")) Is Nothing Then 'Si la cellule modifiée appartient à la colonne I
        If Target = "CS OUT" Then 'Si la cellule modifiée correspond à CS OUT
            Target.EntireRow.Copy .Rows(.Range("C" & Rows.Count).End(xlUp).Row + 1) 'Copie de la ligne complète à la suite de la feuille 2
        End If
    End If
End With

End Sub

Merci pour vos réponses et votre aide. Dans le VBA dois-je double cliquer sur Feuil1 (JOURNAL) et rentrer les codes c’est bien cela ? Car une fois fait, le déboguer me notifie ça..

image

Re,

Il faut cliquer sur le bouton [Débogage] pour voir la ligne qui pose problème,

Ceci dit, perso je mettrais

Private Sub Worksheet_Change(ByVal Target As Range)
   'Tout ce qui commence par un "." se rapporte à l'objet conteneur : cette feuille
   ' nom feuille à adapter si besoin
  With Sheets("Feuil2") 
    ' Si la cellule modifiée appartient à la colonne I, avec un "." devant Range
    If Not Intersect(Target, .Range("I:I")) Is Nothing Then 
        ' Si la valeur de la cellule modifiée correspond à CS OUT
        If Target.Value = "CS OUT" Then 
            ' Copie de la ligne complète à la suite de la feuille 2
            Target.EntireRow.Copy .Rows(.Range("C" & Rows.Count).End(xlUp).Row + 1) 
        End If
    End If
  End With
End Sub

A+

C'est bien ça, mais vous avez mal recopié. Il y a une virgule avant le .Rows et non après. Je vous invite à faire un copié-collé de mon code, ça permettra aussi de garder l'indentation !

Salut Pedro22

C'est bien ça, mais vous avez mal recopié. Il y a une virgule avant le .Rows et non après. Je vous invite à faire un copié-collé de mon code, ça permettra aussi de garder l'indentation !

Pourtant un CTRL+C puis un CTRL+V ne devrait pas poser problème

J’aurais fait le copie collé mais j’ai un problème de connexion actuellement sur mon pc. voici la ligne qui pose problème (désolé j’ai oublié).

image

Soheil,

Vous êtes sérieux là ou vous le faites exprès pour vous la ligne donnée et la votre sont identique !?

Commencez par apprendre à développer objet, avant de vous lancer, d'accord...

Bonjour Bruno,

Je suis désolé, votre Macro fonctionne correctement. En effet, je suis débutant dans ce domaine et c'est un fichier que je dois rendre en fin de semaine. Votre aide et celui de @Pedro22 ont été précieux. Je me tacherai d'apprendre d'avantage pour la suite.

Passez une excellente journée et un excellent week-end messieurs.

Cordialement,

Bonjour Soheil

C'est bien pour cette raison, qu'il vaut mieux faire CTRL+C (copier) et CTRL+V (coller) du code que l'on vous donne

Sinon pour mieux comprendre, vous pourriez faire également

Edit : J'avais zappé que le module est placé dans la feuille "JOURNAL"

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Sht As Worksheet
  ' Définir le nom de la feuille de travaille
  Set Sht = ThisWorkbook.Sheets("Feuil2")
  ' Si la cellule modifiée appartient à la colonne I de la feuille ACTIVE
  If Not Intersect(Target, Range("I:I")) Is Nothing Then
    ' Si la valeur de la cellule modifiée correspond à CS OUT
    If Target.Value = "CS OUT" Then
      ' Copie de la ligne complète à la suite de la feuille 2
      Target.EntireRow.Copy Sht.Rows(Sht.Range("C" & Rows.Count).End(xlUp).Row + 1)
    End If
  End If
  Set Sht = Nothing
End Sub

A+

Salut Bruno,

Juste une petite correction, la colonne I n'appartient pas à la feuille 2, mais à la feuille 1 (JOURNAL) dans laquelle est placée le code.

Donc .Range("I:I") ou Sht.Range("I:I") devraient plutôt être Range("I:I") ou Activesheet.Range("I:I") ou Sheets("JOURNAL").Range("I:I").

Salut Pedro,

Merci pour cette précision, en reprenant le fil depuis le début, effectivement... code corrigé

Au plaisir

Pardonnez-moi,

Dans l'explication je n'ai pas précisé que je voudrais recopier toutes les lignes avec le mot "CS OUT" dans le "Feuil2". En effet, j'aurais besoin d'une traçabilité des toutes les palettes sortantes. Avec votre codage, juste une ligne s'affiche dans la feuille2.

****Je travaille actuellement sur un fichier pour la gestion de stock de notre palettier. Je voudrais savoir s'il y a une macro qui peut me permettre de transférer une ligne entière entièrement toutes les lignes (dans l'onglet JOURNAL) dans un autre onglet (Feuil2) , dès que dans la colonne I (Statut) on saisi le mot "CS OUT".****

Cordialement,

Au début ça a marché pour toutes les lignes.. Ensuite quand j'ai mis à jour votre dernier code, il m'affiche qu'une ligne dans l'onglet "SORTIES_CS" (anciennement feuil2) et quand on bascule les autres lignes en CS OUT il remet à jour la même ligne…

Probleme resolu. Merci encore !

Bonjour Messieurs,

Pourriez-vous me conseiller un code VBA (avec bouton) dans la page "JOURNAL" pour effacer cette fois-ci toutes les lignes de la colonne "I" contenant le mot "CS OUT"? Est-ce possible ?
J'en ai mis une qui marche mais malheureusement ça fait interférence avec la précédente macro. Pour le coup je l'ai effacée. Merci d'avance!

Cordialement,

Rechercher des sujets similaires à "fichier palettier"