Microsoft 365 VBA - Transferer une ligne d un onglet a l autre

  • Initiateur de la discussion Initiateur de la discussion Saumon80
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Saumon80

XLDnaute Occasionnel
Bonjour ,

Jai un fichier et souhaiterais savoir comment transferer une ligne d un onglet a lautre sous conditions ?

Je souhaiterais ajouter une colonne J de l onglet pending complaints qui si elle a la valeur "complete" la deplace dans longlet "resolved complaints' a la suite des autres existantes:

Existe il un code permettant de faire cela?

Merci
 

Pièces jointes

Bonjour Saumon,
Sérieusement, j'ai rien compris.
Jai un fichier et souhaiterais savoir comment transferer une ligne d un onglet a lautre sous conditions ?
ok, je transfère une ligne de Pending_Complaints vers la feuille Resolved_Complaints sur conditions.

Je souhaiterais ajouter une colonne J de l onglet pending complaints qui si elle a la valeur "complete" la deplace dans longlet "resolved complaints' a la suite des autres existantes:
La feuille Pending_Complaints n'a pas de colonne J occupée.
Que doit on faire ?
Est ce cela :
Si en Pending_Complaints je trouve "Complète" en colonne J sur une ligne alors je transfère cette ligne à la fin de la feuille Resolved_Complaints, et je l'efface de la feuille Pending_Complaints ?
Seulement Pending_Complaints à 9 colonnes, et Resolved_Complaints 12 colonnes. Donc quelles colones doit on copiées ?
 
Bonjour Saumon80, sylvanu,

Bah on peut toujours faire un essai avec le fichier joint et ce code dans la 2ème feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Cells(Target.Row, 10) <> "Complete" Then Exit Sub
Cancel = True
With Sheets("Resolved_Complaints")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .Cells(.Rows.Count, 1).End(xlUp)(2)
        .Resize(, 9) = Cells(Target.Row, 1).Resize(, 9).Value
        Target.EntireRow.Delete
        .Cells(1, 10) = "it's done"
        .Cells(1, 11) = Environ("UserName")
        .Cells(1, 12) = Date
    End With
End With
End Sub
et adapter ensuite ce qu'il faut adapter.

A+
 

Pièces jointes

Bonjour Saumon,
Sérieusement, j'ai rien compris.
Bonjour Sylvanu et Desole pour la confusion.
La feuille Pending_Complaints n'a pas de colonne J occupée.
Que doit on faire ?
Est ce cela :
Si en Pending_Complaints je trouve "Complète" en colonne J sur une ligne alors je transfère cette ligne à la fin de la feuille Resolved_Complaints, et je l'efface de la feuille Pending_Complaints ?
Seulement Pending_Complaints à 9 colonnes, et Resolved_Complaints 12 colonnes. Donc quelles colones doit on copiées ?
Oui tout a fait , je viens de rajouter la colonne J , en effet la logique que vous mentionne est exacte.
Il faudrait dans ce cas copier de la colonne A a I de longlet pending conplaints vers resolved complaints . Dans l onglet resolved complaints les colonnes J a L sont en addition.
 

Pièces jointes

Bonjour Job75,

Parfait ! Merci beaucoup cela marche en effet.
Est-il possible de declencher le transfert une fois la saisie du mot "complete" dans le fichier ou d'avoir autrement un bouton qui transfere toutes les lignes marques "complete" en lieu du double click?

Merci encore!
 
Est-il possible de declencher le transfert une fois la saisie du mot "complete" dans le fichier
Voyez le fichier joint avec cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim F As Worksheet, n&, P As Range, c As Range
Set F = Sheets("Resolved_Complaints") 'à adapter
With [A1].CurrentRegion.Resize(, 10)
    n = Application.CountIf(.Columns(10), "Complete")
    If n = 0 Then Exit Sub
    Set P = .Offset(1).Resize(.Rows.Count - 1)
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    If FilterMode Then ShowAllData 'si la feuille est filtrée
    .Rows.Hidden = False 'affiche toutes les lignes, au cas où...
    .AutoFilter 10, "Complete" 'filtre automatique sur la colonne J
    If F.FilterMode Then F.ShowAllData 'si la feuille est filtrée
    Set c = F.Cells(F.Rows.Count, 1).End(xlUp)(2)
    P.Copy c 'copie-colle la zone filtrée
    c(1, 10).Resize(n) = "it's done"
    c(1, 11).Resize(n) = Environ("UserName")
    c(1, 12).Resize(n) = Date
    P.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes sources copiées
    .AutoFilter 'ôte le filtre
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
Elle fonctionne même si l'on entre "Complete" sur des sélections multiples en colonne J.

Bonne nuit.
 

Pièces jointes

Dernière édition:
Bonjour Saumon80, le forum,

Si l'on veut pouvoir utiliser des tableaux structurés il faut faire quelques modifications :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim F As Worksheet, n&, P As Range, c As Range
Set F = Sheets("Resolved_Complaints") 'à adapter
With [A1].CurrentRegion
    n = Application.CountIf(.Columns(10), "Complete")
    If n = 0 Then Exit Sub
    Set P = .Offset(1).Resize(.Rows.Count - 1)
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    .AutoFilter: .AutoFilter 'si le tableau est filtré
    .Rows.Hidden = False 'affiche toutes les lignes, au cas où...
    .AutoFilter 10, "Complete" 'filtre automatique sur la colonne J
    Set c = F.UsedRange(F.UsedRange.Rows.Count + 1, 1)
    While c(0) = "": Set c = c(0): Wend 'pour trouver la 1ère cellule vide
    P.Copy c 'copie-colle la zone filtrée
    c(1, 10).Resize(n) = "it's done"
    c(1, 11).Resize(n) = Environ("UserName")
    c(1, 12).Resize(n) = Date
    Set P = P.SpecialCells(xlCellTypeVisible) 'mémorise
    .AutoFilter: .AutoFilter 'ôte le filtre
    P.Delete xlUp 'supprime les lignes sources copiées
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
La macro fonctionne que les tableaux soient structurés ou non.

A+
 

Pièces jointes

Bonjour Job75,

Desole de vous deranger encore, mais quand je fais une saisisie dans le dernier fichier je ne peux la valider car je recoit le message d erreur suivant :

1649230089673.png


Quand j'utilise le fichier initial cela marche cependant. Est-ce du a mon PC?

Merci
 
Il y a de nombreux exemples sur le forum sur la manière de remplir une ComboBox ou ListBox par la méthode .List, si vous n'y arrivez pas créez une nouvelle discussion.

De toute façon ce n'est plus l'objet de ce fil.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
20
Affichages
872
Retour