Envoyer ligne d'un onglet vers un autre onglet

Bonsoir,

Sur le fichier joint, je souhaiterais envoyer une ligne d'un onglet vers un autre onglet après avoir saisi une info dans une cellule précise.

Voir les explications dans le fichier

Merci à vous

Galiax

5recap-machine.xlsx (66.20 Ko)

Bonjour

Première chose à corriger, défusionnez les cellules B3 et C3.

Votre fichier en retour

4recap-machine.xlsx (64.71 Ko)

Crdlt

Bonjour Dan,

merci pour la formule, mais j'aimerais qu'une fois le N° Machine saisie dans B3 et valider (B3 redevient vide), la ligne soit supprimée de l'onglet "RECAP MACHINE" et copier dans l'onglet "DEPART"

et si je ressaisie un autre N° Machine, suppression de la ligne dans le 1er ONGLET, et copier à la suite de l'autre dans le 2ème ONGLET, etc etc.....

image

Cordialement

Bonjour,

Vous auriez dû préciser au départ car là, par formule ce n'est pas possible, il faut passer par la programmation.

j'aimerais qu'une fois le N° Machine saisie dans B3 et valider (B3 redevient vide), la ligne soit supprimée de l'onglet "RECAP MACHINE" et copier dans l'onglet "DEPART"

et si je ressaisie un autre N° Machine, suppression de la ligne dans le 1er ONGLET, et copier à la suite de l'autre dans le 2ème ONGLET,

Hum... c'est le contraire qu'il faut effectuer.... --> copier dans départ puis supprimer dans le 1er onglet


Dans le fichier que j'ai posté, faites ceci :

- Supprimez les formules que je vous ai données dans la feuille Depart
- Click droite sur le nom de la feuille RECAP MACHINE
- Choisir l'option "Visualiser le code"
- Collez le code ci-dessous dans la fenêtre

Option Explicit
Dim encours As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Integer, dlg As Integer

If Target.Count > 1 Then Exit Sub
If encours = True Then Exit Sub

If Not Intersect(Target, Range("B3")) Is Nothing Then
    On Error Resume Next
    lig = WorksheetFunction.Match(Target.Value, Range("B10:B" & Range("B" & Rows.Count).End(xlUp).Row), 0) + 9
    If lig = 0 Then
        MsgBox "le Numero de machine " & Target.Value & " n'existe pas !", vbCritical, "Erreur reference machine"
        encours = False
        Exit Sub
    End If
    encours = True
    With Sheets("Depart")
        dlg = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A" & dlg + 1) = Range("A" & lig).Value
        .Range("B" & dlg + 1) = Target.Value
        .Range("C" & dlg + 1) = Range("C" & lig).Value
        .Range("D" & dlg + 1) = Range("D" & lig).Value
        .Range("E" & dlg + 1) = Range("E" & lig).Value
        .Range("F" & dlg + 1) = Range("F" & lig).Value
    End With
    Rows(lig).Delete
    Target.ClearContents
End If
encours = False
End Sub

- Enregistrez votre fichier au format XLSM (pour accepter l'utilisation des macros)

Pour mémoire, B3 ne doit pas être fusionné

Cordialement

Bonjour,

désolé, je me suis mal exprimé au départ...

le code ne copie pas la ligne dans l'ongle "DEPART"

par contre il fonctionne nickel pour le 1er ONGLET

Cdlt

Re,

Cdlt

Bonjour,

Non, le problème n'est pas complètement résolu, car avec le code ça ne copie pas la ou les lignes dans l'onglet "DEPART"

et pour + de sécurité, j'ai ajouter cette MSGBOX qui ne fonctionne pas quand je clique sur NON!!

Dim réponse As Integer
réponse = MsgBox("Attention, êtes-vous sûre de vouloir supprimer ce N° Machine ? " & _
vbLf, vbQuestion + vbYesNo, " Message d'EXCEL")
If réponse = vbNo Then Exit Sub
Rows(lig).Delete
Target.ClearContents
End If
encours = False
End Sub

Bonjour

ça ne copie pas la ou les lignes dans l'onglet "DEPART"

Désolé, je n'avais pas bien lu votre message
Je ne sais pas ce que vous faites mais si je mets le code proposé dans votre fichier posté cela fait ce que vous demandez.
Ou alors vous n'avez pas suivi point par point tout ce que je vous ai écrit pour le placement du code.

et pour + de sécurité, j'ai ajouter cette MSGBOX qui ne fonctionne pas quand je clique sur NON!!

Quelle sécurité ? vous avez demandé que si la ligne est copiée dans départ on supprime dans la recap. Le code fait cela
Pourquoi voulez-vous faire une confirmation ?


Pensez à utiliser les balises de code en cliquant sur l'icone </> lorsque vous postez un code

Re,

Non en utilisant le code ça ne copie pas la ligne dans "départ' mais ça supprime bien la ligne dans "RECAP" et pour la msg Box c était juste une vérification pour être sûre d avoir saisie le bon N de machine...

Cdlt

Re,

Ben alors bizarre que le code le fait sur votre fichier posté et pas chez vous

Je serais bien curieux de voir votre vrai fichier.

Edit : Vérifiez un peu que votre d'onglet est bien DEPART. Dans votre fichier posté ici, vous aviez un espace derrière le T

Bien joué,

j'ai renommé l'onglet et ça fonctionne trop bien (il devait y avoir un espace, comme vous avez dit), maintenant je vais essayé de voir pour que lorsque que ça copie ca me mette les bordures....Un grand merci Dan

A++

image

de voir pour que lorsque que ça copie ca me mette les bordures.

Faites comme ceci. Juste entre la ligne .Range("F" & dlg + 1) = Range("F" & lig).Value et le END WITH, mettez ces lignes

With .Range("A" & dlg + 1 & ":F" & dlg + 1)
    .BorderAround LineStyle:=xlContinuous
    .BorderAround ColorIndex:=0
    .BorderAround Weight:=xlThin

    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .Weight = xlThin
    End With
End With

Crdlt

Edit : pour le code de confirmation de la suppression vous pouvez simplifier comme ceci

    If MsgBox("Attention, êtes-vous sûre de vouloir supprimer ce N° Machine ? " & _
        vbLf, vbQuestion + vbYesNo, " Message d'EXCEL") = vbYes Then
        Rows(lig).Delete
    End If
    Target.ClearContents

Veillez à mettre l'instruction target.clearcontents juste avant le dernier End with. De cette façon que vous supprimiez la ligne ou non, B3 sera toujours effacée

SUPER, merci encore, trop content

@+

Rechercher des sujets similaires à "envoyer ligne onglet"