Copier coller données d'un onglet à l'autre selon condition

Bonjour à tous,

Je cherche a effectuer un transfert automatique des données issues d'un onglet à l'autre".

Plus précisément je souhaite copier/coller les cellules de colonnes A à M de l'onglet "suivi_devis" vers l'onglet "suivi_affaire" lorsque je passe le statut du devis à "accepté" dans l'onglet "suivi_devis". Les colonne ne sont pas tout à fait dans le même ordre mais je pense pouvoir rebidouiller cela correctemment lorsque j'aurais la base.

Evidemment les devis déjà "accepté" ne doivent pas se copier/coller une seconde fois lorsque la macro va "scanner" l'onglet "suivi devis".

Noter que les données des cellules E à J de l'onglet "suivi_devis" sont déjà issues d'une "rechercheV" or c'est bien la données que je souhaite copier et non le code

Un grand merci aux âmes charitables qui pourront passer du temps sur mon sujet

Maxime

Bonjour

Votre fichier est retiré pour cause de données confidentielles

Cordialement

Edit : Voici une proposition à essayer dans votre fichier :
- faite un click droite sur l'onglet Suivi devis
- choisir l'option "visualiser le code"
- Coller le code ci-dessous dans la fenêtre

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

If Not Intersect(Target, Range("R" & Target.Row)) Is Nothing Then
    If Target.Value = Sheets("Données").Range("A2") Then
        If MsgBox("Voulez-vous passez le devis en affaire ?", vbYesNo + vbDefaultButton2) = vbYes Then
            With Worksheets("Suivi_affaire")
                On Error Resume Next
                lig = .Range("A:A").Find(Range("B" & Target.Row), LookIn:=xlValues, lookat:=xlWhole).Row
                If lig > 0 Then MsgBox "le devis est déjà passé en affaire.": Exit Sub

                lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
                .Range("A" & lig) = Range("B" & Target.Row)
                .Range("B" & lig) = Range("C" & Target.Row)
                .Range("C" & lig) = Range("A" & Target.Row)
                .Range("D" & lig) = Range("D" & Target.Row)
                .Range("K" & lig) = Range("J" & Target.Row)
                .Range("L" & lig) = Range("M" & Target.Row)
                .Range("M" & lig) = Range("L" & Target.Row)
            End With
        End If
    End If
End If
End Sub

Si le code devis est connu en affaire, le code vous enverra un message.
Vu que vous passez par code, je pense qu'il ne serait pas nécessaire d'avoir des formules dans votre feuille Affaire sur les informations venant des colonnes du suivi devis. Moins de formules on a mieux c'est

Cordialement

Merci pour le retour, les données écrites étaient fictives je vais tenter d'exploiter le code offert ci dessus et je reviens vers vous pour vous donner le résultat.

Je rééditerai mon fichier au besoin

Edit: ca fonctionne parfaitement! Un grand merci Dan, je me suis permis de remettre mon fichier à dispo si ca peut donner un coup de pouce à quelqu'un j'ai mis des noms fictifs plus explicites :-)

Pourrais-je te demander la "traduction" du code proposé, j'essai moi même de bidouiller un peu de vba et comprendre ce que j'applique est toujours intéressant

8suivi-client.zip (892.90 Ko)

re,

Pourrais-je te demander la "traduction" du code proposé, j'essai moi même de bidouiller un peu de vba et comprendre ce que j'applique est toujours intéressant

Avec plaisir, voici l'explication :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Integer 'définir la variable lig

'on verifie que l'on est sur la cellule R --> c'est le Target
If Not Intersect(Target, Range("R" & Target.Row)) Is Nothing Then
    'on verifie que la valeur Target est égale à la valeur "accepte" (A2 de la feuille Données)
    If Target.Value = Sheets("Données").Range("A2") Then
        'message de confirmation que l'on veut bien passer en affaire
        If MsgBox("Voulez-vous passez le devis en affaire ?", vbYesNo + vbDefaultButton2) = vbYes Then
            'si réponse Oui, exécution des lignes ci dessous
            With Worksheets("Suivi_affaire") 'feuille suivi affaire
                'gestion erreur : evite d'avoir un erreur si lig = 0
                On Error Resume Next
                'cherche la ligne où se trouve le code devis dans la colonne A de la feuille Suivi affaire
                lig = .Range("A:A").Find(Range("B" & Target.Row), LookIn:=xlValues, lookat:=xlWhole).Row
                'si lig est supérieur à 0 --> le devis est déjà passé en affaire. On sort de la macro par exit sub
                If lig > 0 Then MsgBox "le devis est déjà passé en affaire.": Exit Sub
                'si lig = 0, on cherche la dernière ligne dans la feuille suivi affaire et + 1 pour ajout nouvelle ligne
                lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
                'complete les valeurs dans feuille suivi affaire en fonction de la ligne code devis (Cellule R --> Target.row)
                .Range("A" & lig) = Range("B" & Target.Row)
                .Range("B" & lig) = Range("C" & Target.Row)
                .Range("C" & lig) = Range("A" & Target.Row)
                .Range("D" & lig) = Range("D" & Target.Row)
                .Range("K" & lig) = Range("J" & Target.Row)
                .Range("L" & lig) = Range("M" & Target.Row)
                .Range("M" & lig) = Range("L" & Target.Row)
            End With
        End If
    End If
End If
End Sub

Si besoin dites moi

Si ok, -->

Cordialement

Un grand merci Dan, c'est même plus abouti que ce que je j'avais demandé

Je cloture

Rechercher des sujets similaires à "copier coller donnees onglet condition"