XL 2016 Button copier coller cellules indépendantes VBA autre feuille

  • Initiateur de la discussion Initiateur de la discussion Duam
  • 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 !

Duam

XLDnaute Nouveau
Bonjour,

Je suis débutante en VBA, et je ne comprends pas tout!

Je dois effectuer un fichier qui copie des cellules indépendantes les unes des autres (ce n'est pas une plage de cellules) dans une feuille qui se nomme "fiche saisie".
Puis, je dois coller les cellules dans une autre feuille "données" à la suite des autres valeurs de chaque colonnes.

Je voulais faire un bouton activeX pour copier les valeurs et les coller dans l'autre feuille.
J'ai une erreur 1004 qui est à la ligne 5 mais je ne comprends pas.
Il y a des annotations mais pas à prendre en compte

VB:
Private Sub Copier_dans_données_Click()
    Application.ScreenUpdating = False
    Dim xSheet As Worksheet
    Set xSheet = ActiveSheet
        If xSheet.Name <> "Definitions" And xSheet.Name <> "fx" And xSheet.Name <> "Needs" Then
Worksheets("Fiche saisie").Cells("M4").Copy Destination:=Worksheets("Données").Range("A")
Worksheets("Fiche saisie").Cells("C3").Copy Destination:=Worksheets("Données").Range("B")
Worksheets("Fiche saisie").Cells("C5").Copy Destination:=Worksheets("Données").Range("C")
Worksheets("Fiche saisie").Cells("I7").Copy Destination:=Worksheets("Données").Range("D")

'Format cellule mois et année
Worksheets("Fiche saisie").Cells("C3").Copy Destination:=Worksheets("Données").Range("E")
Worksheets("Fiche saisie").Cells("C3").Copy Destination:=Worksheets("Données").Range("F")

Worksheets("Fiche saisie").Cells("C11").Copy Destination:=Worksheets("Données").Range("G")
Worksheets("Fiche saisie").Cells("I5").Copy Destination:=Worksheets("Données").Range("H")
Worksheets("Fiche saisie").Cells("I3").Copy Destination:=Worksheets("Données").Range("I")
Worksheets("Fiche saisie").Cells("C13").Copy Destination:=Worksheets("Données").Range("J")
Worksheets("Fiche saisie").Cells("C7").Copy Destination:=Worksheets("Données").Range("K")
Worksheets("Fiche saisie").Cells("I9").Copy Destination:=Worksheets("Données").Range("M")
Worksheets("Fiche saisie").Cells("I11").Copy Destination:=Worksheets("Données").Range("N")
Worksheets("Fiche saisie").Cells("P9").Copy Destination:=Worksheets("Données").Range("O")
Worksheets("Fiche saisie").Cells("P13").Copy Destination:=Worksheets("Données").Range("P")
Worksheets("Fiche saisie").Cells("M9").Copy Destination:=Worksheets("Données").Range("R")
Worksheets("Fiche saisie").Cells("I13").Copy Destination:=Worksheets("Données").Range("S")
'Valeur en gramme
Worksheets("Fiche saisie").Cells("C20").Copy Destination:=Worksheets("Données").Range("T")
Worksheets("Fiche saisie").Cells("B20").Copy Destination:=Worksheets("Données").Range("U")
Worksheets("Fiche saisie").Cells("D20").Copy Destination:=Worksheets("Données").Range("V")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("W")
Worksheets("Fiche saisie").Cells("F20").Copy Destination:=Worksheets("Données").Range("X")
Worksheets("Fiche saisie").Cells("G20").Copy Destination:=Worksheets("Données").Range("Y")
Worksheets("Fiche saisie").Cells("H20").Copy Destination:=Worksheets("Données").Range("Z")
Worksheets("Fiche saisie").Cells("I20").Copy Destination:=Worksheets("Données").Range("AA")
Worksheets("Fiche saisie").Cells("J20").Copy Destination:=Worksheets("Données").Range("AD")
Worksheets("Fiche saisie").Cells("K20").Copy Destination:=Worksheets("Données").Range("AE")
Worksheets("Fiche saisie").Cells("L20").Copy Destination:=Worksheets("Données").Range("AF")
Worksheets("Fiche saisie").Cells("M20").Copy Destination:=Worksheets("Données").Range("AG")
Worksheets("Fiche saisie").Cells("B27").Copy Destination:=Worksheets("Données").Range("AH")
'SOMME E27 + F27
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("AI")
'Pas sur fiche saisie
Worksheets("Fiche saisie").Cells("C27").Copy Destination:=Worksheets("Données").Range("AJ")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("AK")
Worksheets("Fiche saisie").Cells("H27").Copy Destination:=Worksheets("Données").Range("AL")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("AM")

Worksheets("Fiche saisie").Cells("L27").Copy Destination:=Worksheets("Données").Range("AP")
Worksheets("Fiche saisie").Cells("K27").Copy Destination:=Worksheets("Données").Range("AQ")
Worksheets("Fiche saisie").Cells("I27").Copy Destination:=Worksheets("Données").Range("AR")
Worksheets("Fiche saisie").Cells("M27").Copy Destination:=Worksheets("Données").Range("AS")
Worksheets("Fiche saisie").Cells("N27").Copy Destination:=Worksheets("Données").Range("AT")

Worksheets("Fiche saisie").Cells("P27").Copy Destination:=Worksheets("Données").Range("AW")
'Réclamation décision
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("AY")

Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("AZ")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("BA")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("BB")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("BC")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("BD")
Worksheets("Fiche saisie").Cells("E20").Copy Destination:=Worksheets("Données").Range("BE")

            xSheet.Range("J1:L17").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If

    Application.ScreenUpdating = True
End Sub
 
pour nommer une cellule, tu as deux choix: sous forme de range
range("A1")
soit sous sa forme Cells(numLigne,NumCol)
A1==> Range("A1") = Cells(1,1)
==> Cells("A1") ==> ca ne marche pas

si tu postais ton fichier en exemple, on pourrait t'aider à expliquer le code et l'optimiser pour que tu t'en sortes
 
pour nommer une cellule, tu as deux choix: sous forme de range
range("A1")
soit sous sa forme Cells(numLigne,NumCol)
A1==> Range("A1") = Cells(1,1)
==> Cells("A1") ==> ca ne marche pas

si tu postais ton fichier en exemple, on pourrait t'aider à expliquer le code et l'optimiser pour que tu t'en sortes

Je n'ai rien changé pour le moment, et je vous joint le fichier.
 

Pièces jointes

en retour ton fichier

1) la macro est mise dans un module standard
et associée à un bouton de formulaire

2) j'ai mis des commentaires dans le code
la dernière ligne (pastespecial) a été mise en commentaire, car, en l'état, ca bug
Merci, en effet les dernières lignes ne servaient pas.
J'essaye de faire un pastespecial car dans certaines cellules il y a des formules et il n'y a que la valeur qui m'intéresse
 

Pièces jointes

s'il s'agit de copier uniquement les valeurs, tu peux te passer du copy destination

VB:
Sub Copier_dans_données()
Dim xSheet As Worksheet

Application.ScreenUpdating = False

Set xSheet = ActiveSheet

If xSheet.Name <> "Definitions" And xSheet.Name <> "fx" And xSheet.Name <> "Needs" Then
    With Sheets("Données") 'DANS la feuille "Données"
        LastLine = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première ligne VIDE de la colonne A
        
        'copy colle des données dans la feuille "Données"
        .Range("A" & LastLine) = xSheet.Range("M4").Value
        .Range("B" & LastLine) = xSheet.Range("C3").Value
        .Range("C" & LastLine) = xSheet.Range("C5").Value
        .Range("D" & LastLine) = xSheet.Range("I7").Value
        
        'Format cellule mois et année
        .Range("E" & LastLine) = xSheet.Range("C3").Value
        .Range("F" & LastLine) = xSheet.Range("C3").Value
        
        .Range("G" & LastLine) = xSheet.Range("C11").Value
        .Range("H" & LastLine) = xSheet.Range("I5").Value
        .Range("I" & LastLine) = xSheet.Range("I3").Value
        .Range("J" & LastLine) = xSheet.Range("C13").Value
        .Range("K" & LastLine) = xSheet.Range("C7").Value
        .Range("M" & LastLine) = xSheet.Range("I9").Value
        .Range("N" & LastLine) = xSheet.Range("I11").Value
        .Range("O" & LastLine) = xSheet.Range("P9").Value
        .Range("P" & LastLine) = xSheet.Range("P13").Value
        
        .Range("R" & LastLine) = xSheet.Range("M9").Value
        .Range("S" & LastLine) = xSheet.Range("I13").Value
        'Valeur en gramme
        .Range("T" & LastLine) = xSheet.Range("C20").Value
        .Range("U" & LastLine) = xSheet.Range("B20").Value
        .Range("V" & LastLine) = xSheet.Range("D20").Value
        .Range("W" & LastLine) = xSheet.Range("E20").Value
        .Range("X" & LastLine) = xSheet.Range("F20").Value
        .Range("Y" & LastLine) = xSheet.Range("G20").Value
        .Range("Z" & LastLine) = xSheet.Range("H20").Value
        .Range("AA" & LastLine) = xSheet.Range("I20").Value
        .Range("AD" & LastLine) = xSheet.Range("J20").Value
        .Range("AE" & LastLine) = xSheet.Range("K20").Value
        .Range("AF" & LastLine) = xSheet.Range("L20").Value
        .Range("AG" & LastLine) = xSheet.Range("M20").Value
        .Range("AH" & LastLine) = xSheet.Range("B27").Value
        
        'SOMME E27 + F27
        .Range("AI" & LastLine) = xSheet.Range("E20").Value
        
        'Pas sur fiche saisie
        .Range("AJ" & LastLine) = xSheet.Range("C27").Value
        .Range("AK" & LastLine) = xSheet.Range("E20").Value
        .Range("AL" & LastLine) = xSheet.Range("H27").Value
        .Range("AM" & LastLine) = xSheet.Range("E20").Value
        .Range("AP" & LastLine) = xSheet.Range("L27").Value
        .Range("AQ" & LastLine) = xSheet.Range("K27").Value
        .Range("AR" & LastLine) = xSheet.Range("I27").Value
        .Range("AS" & LastLine) = xSheet.Range("M27").Value
        .Range("AT" & LastLine) = xSheet.Range("N27").Value
        .Range("AW" & LastLine) = xSheet.Range("P27").Value
       
    
    'pour faire un pastespecial valeurs, transposer, il faut déjà commencer par un copier
        'xSheet.Range("J1:L17").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
End If

Application.ScreenUpdating = True
End Sub

Je crois meme que le .value n'est pas indispensable
 
- 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
1
Affichages
441
Retour