Couper coller en VBA fonctionne à moitié

Gazzzz

XLDnaute Nouveau
Bonsoir à tous, j’espère que malgré la situation tous le monde se porte pour le mieux.

En cette période de confinement, j’essaie d'améliorer mon excel. Seulement je bute sur un problème de couper/coller entre deux tableau et je n'ai trouvé la réponse nul part. Voici la situation:

Mon fichier comporte 3 feuilles: "import", "portefeuille" et "vendu".

- La feuille "import" possède les données qui se mettent à jours toutes les 60 minutes grâce à une requête internet. J'ai supprimé cette requête du fichier joint pour respecter le forum et ses règles de sécurité. Les données actualisés sont exploitées dans "portefeuille" --> pas de problème

- La feuille "portefeuille" contient un tableau ou je peux déjà ajouter et supprimer des lignes avec des macros que j'ai bidouiller.
Je souhaite ajouté un bouton permettant de basculer une ligne du tableau de "portefeuille" vers le tableau de "vendu" --> J'y suis arrivé en bricolant des information récupérées sur le forum, merci à tous!
Cependant le problème commence ici.

Lorsque je bascule la ligne de "portefeuille" à "vendu", celle-ci continue de récupérer les information en temps réel depuis la feuille "import".
J'en conclu donc qu'il faut utiliser un collage spécial (pastespecial il me semble?) pour ne récupérer que les valeurs du moment de la copie.
J'ai essayé énormément de chose sans résultat, il me semble que c'est impossible.
En effet je n'utilise pas de "coller" ou Paste dans mon code puisque je veux pouvoir sélectionner qu'une cellule pour couper la ligne entière.

Voici mon code (oui il est surement pas très optimisé ^^):

Sub CommandButton_Suppression_de_ligne_Click() 'Fonctionne avec en-tête et en ne sélectionnant qu'une cellule
Dim ChoixRows As Range
Dim AConfirmer
' Choix de la ligne
Set ChoixRows = Application.InputBox(Prompt:="Sélectionnez l'action à vendre", Title:="Choix de l'action", Type:=8)
' Sélection de la ligne
ChoixRows.EntireRow.Select
' Demande de confirmation
AConfirmer = MsgBox(Prompt:="Confirmez la vente de l'action", Title:="Confirmer?", Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
' Copie de la ligne
If AConfirmer = vbYes Then ChoixRows.EntireRow.Copy Sheets("Vendu").Range("4:4")
' Suppression de la ligne
ChoixRows.EntireRow.Delete
Sheets("Vendu").Select
Range("F4").Select
Selection.EntireRow.Insert
Range("A1").Select
End Sub


Je mets le fichier également.
Je continue de chercher, si quelqu'un peut me venir en aide ça serai génial.
Je ne suis pas très compétent sur excel, je découvre et essaye de m’intéresser au mieux, toute explication ou piste est la bienvenue.

Merci pour votre aide.

Bonne soirée et soyez prudents.

Quentin.
 

Pièces jointes

  • Ficher gestion portefeuille.xlsm
    44.3 KB · Affichages: 8

kingfadhel

XLDnaute Impliqué
Bonsoir à tous,

Une petite modification dans ton code.

VB:
Sub CommandButton_Suppression_de_ligne_Click() 'Fonctionne avec en-tête et en ne selectionnant qu'une cellule

Dim ChoixRows As Range

Dim AConfirmer
    ' Choix de la ligne
    Set ChoixRows = Application.InputBox(Prompt:="Sélectionnez l'action à vendre", Title:="Choix de l'action", Type:=8)
    ' Sélection de la ligne
    myrow = Selection.Row
    Marange = Range("F" & myrow & ":O" & myrow).Value
    '.EntireRow.Select
    ' Demande de confirmation
    AConfirmer = MsgBox(Prompt:="Confirmez la vente de l'action", Title:="Confirmer?", Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
    ' Copie de la ligne
    If AConfirmer = vbYes Then Sheets("Vendu").Range("F4:O4") = Marange
    ' Suppression de la ligne
    ChoixRows.EntireRow.Delete
Sheets("Vendu").Select
Range("F4").Select
Selection.EntireRow.Insert
Range("A1").Select
End Sub
 

Gazzzz

XLDnaute Nouveau
Hello,
merci de ton intérêt pour mon soucis c'est vraiment cool.

J'ai remplacé le code, à première vue cela ne fonctionne pas.
La ligne disparaît de "portefeuille" mais n’apparaît plus dans le tableau "vendu".
Je vais essayer de comprendre ce que tu à modifié déjà ;)
Si besoin je joins le nouveau fichier.
 

Gazzzz

XLDnaute Nouveau
Je n'ai pas tout compris mais je ne vois pas l'action de coller dans ton nouveau code Kingfadhel...
Je débute, mais j’essaie!
Ma volonté n'est pas de supprimer la ligne mais bien de la déplacer sans les formules.

Le code ci-dessus à été bricolé par mes soins mais je n'ai pas modifié les textes, je pense que c'est ce qui vous a embrouillé, désolé. o_O

Ici mon nouveau code avec les textes mis à jours pour plus de compréhension:

VB:
Sub Vendre() 'Fonctionne avec en-tête et en ne selectionnant qu'une cellule

Dim ChoixRows As Range
Dim AConfirmer
    ' Choix de la ligne
    Set ChoixRows = Application.InputBox(Prompt:="Sélectionnez l'action à vendre", Title:="Choix de l'action", Type:=8)
    ' Sélection de la ligne
    ChoixRows.EntireRow.Select
    ' Demande de confirmation
    AConfirmer = MsgBox(Prompt:="Confirmez la vente de l'action", Title:="Confirmer?", Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
    ' Copie de la ligne
    If AConfirmer = vbYes Then ChoixRows.EntireRow.Copy Sheets("Vendu").Range("4:4")
    ' Suppression de la ligne
    ChoixRows.EntireRow.Delete
Sheets("Vendu").Select
Range("F4").Select
Selection.EntireRow.Insert
Range("A1").Select
End Sub

Et le fichier qui va avec en pièce jointe.
Bonne soirée et bon ap'

Quentin.
 

Pièces jointes

  • Ficher gestion portefeuille.xlsm
    45.6 KB · Affichages: 11

Gazzzz

XLDnaute Nouveau
Bonjour à tous et bon dimanche!
J'essaye de rajouter en fin de mon code un copier coller au même endroit, (de la ligne 4 à la ligne 4) en collant seulement les valeurs cette fois-ci pour justement perde les formules. Ca peut marcher mais je n'y arrive pas.. le pastespecial est encore inconnu pour moi :mad:
 

Phil69970

XLDnaute Barbatruc
Bonjour Gazzzz, kingfadhel

Essaye ceci:
A titre perso ton programme m'intéresse....:)
Si tu veux partager....ça serait sympa.
VB:
Sub Vendre()

Dim FPortefeuille As String
Dim FVendu As String
Dim ChoixRows As Variant
Dim Derlig As Long
Dim Msg, Reponse

FPortefeuille = Sheets("Portefeuille").Name
FVendu = Sheets("Vendu").Name
FImport = Sheets("Import").Name

Derlig = Sheets(FPortefeuille).Range("F" & Rows.Count).End(xlUp).Row - 1

ChoixRows = Application.InputBox("Sélectionnez l'action à vendre", "Choisir l'action à vendre")
'Test les réponses
If ChoixRows = "" Or ChoixRows = False Then Exit Sub
If ChoixRows > Derlig Then Exit Sub
If ChoixRows < 11 Then Exit Sub

With Sheets(FPortefeuille)
    ValeurVendu = .Range("G" & ChoixRows)
    ValeurVendu = ValeurVendu & " actions " & .Range("F" & ChoixRows)
End With

Msg = "Vous allez vendre votre ligne de " & ValeurVendu & Chr(13) & Chr(10) & "Souhaitez-vous continuer?"
Reponse = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, "Vente actions")

If Reponse = vbYes Then    ' L'utilisateur a choisi Oui.
 
    '1)On insert une ligne vide l'onglet "Vendu"
    Sheets(FVendu).Rows("5:5").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   
    '2)On copie la ligne à vendre
    Sheets(FPortefeuille).Range("F" & ChoixRows & ":O" & ChoixRows).Copy
 
    '3)On colle la ligne vendu
    With Sheets(FVendu).Range("F5")
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
         
    '4)On supprime la ligne vendu dans l'onglet "portefeuille"
    Sheets(FPortefeuille).Rows(ChoixRows & ":" & ChoixRows).Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets(FPortefeuille).Range("F8").Select

Else    ' L'utilisateur a choisi Non.
    'Blablabla
End If

End Sub

Dans inputbox on inscrit le N°de la ligne à vendre exemple : 15 pour vendre la 15eme ligne

Cordialement
 
Dernière édition:

Gazzzz

XLDnaute Nouveau
Bonsoir, voici la solution:
VB:
Sub Vendre() 'Fonctionne avec en-tête et en ne selectionnant qu'une cellule

Dim ChoixRows As Range, ChoixVente As Range, Ligne As Long
Dim AConfirmer
With Worksheets("Portefeuille")
    ' Choix de la ligne
    Set ChoixRows = Application.InputBox(Prompt:="Sélectionnez l'action à vendre", Title:="Choix de l'action", Type:=8)
    ' Sélection de la ligne
    Ligne = ChoixRows.Row
    Set ChoixVente = .Range("F" & Ligne & ":O" & Ligne)
    'ChoixRows.EntireRow.Select
    ' Demande de confirmation
    AConfirmer = MsgBox(Prompt:="Confirmez la vente de l'action", Title:="Confirmer?", Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
    If AConfirmer = vbYes Then
        ' Copie de la ligne
        Sheets("Vendu").Range("F4:O4") = ChoixVente.Value
        ' Suppression de la ligne
        .Rows(Ligne).Delete
        'ajout ligne vierge
        Sheets("Vendu").Range("F4").EntireRow.Insert
    End If
    .Range("A1").Select
End With
End Sub
End Sub

Bonne soirée à tous et merci pour votre aide.
A très bientot.
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
748

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki