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 SubSi 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
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 SubSi 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