Copier coller sous VBA

Bonjour,

J'ai crée une petite macro pour copier coller des cellules d'un tableau à un autre sauf que ca marche pas comme je voudrai.

voici la macro

Sub copier_coller()

For vitesse = 1 To 8
For terme = 1 To 10
For i = 0 To 7
With Worksheets("BLACK-BOOK")
Cells(41 + 43 * (vitesse - 1), 15).Select
Selection.Copy
Sheets("BLACK-BOOK").Activate
Cells(434, 6 + 6 * i).Select
ActiveSheet.Paste

End With
Next i
Next terme
Next vitesse
End Sub

alors ce que je veux c'est copier les cellules (41,15) puis (41+43,15) ... et les coller dans l'ordre la cellule (41,15) dans la cellule (434,6) puis (41+43,15) dans (434,6+6*1) ...etc

avec cette macro il copie que la derniere cellule c'est a dire (41+43*(8-1),15) et la colle dans toutes les cellule (434,6+6*i) !!

Pourriez vous m'aider la dessus ??

Merci d'avance

8 réponses

  1. Bonjour,

    Si je comprends bien tes explications, tu dois pouvoir te contenter de
    Sub copier_coller()
    Dim vitesse As Byte
    For vitesse = 0 To 7
    With Worksheets("BLACK-BOOK")
    Cells(41 + 43 * vitesse, 15).Copy
    ActiveSheet.Paste Destination:=Cells(434, 6 + 6 * vitesse)
    End With
    Next vitesse
    End Sub
    A+
    0
    1. Merci beaucoup pour ton aide ca marche parfaitement
      0
    2. mais je voudrai comprendre le As Byte c est quoi l'interet
      0
    3. j'ai encore un probleme ...
      Lors du collage les cellules copié contiennent des formules qui changent quand je colle!
      j'explique par exemple pour la cellule (41,15) sa formule est : =0,000428321989299453*N39 ^ 6 + -0,00596830985295159*N39 ^ 5 + 0,0304432402215616*N39 ^ 4 + ...

      et quand j applique la macro le N39 change mais comme je voudrai.en effet je souhaite en fait que toutes les cellule que je vais copier et coller ont le meme cellule qui va remplacer le N39 pour chaque vitesse ... je sais pas si c'est clair.

      c'est a dire quand je colle la premier cellule (41.15) je veut par exemple elle devient
      : =0,000428321989299453*D432 ^ 6 + -0,00596830985295159*D432^ 5 + 0,0304432402215616*D39 ^ 4 + ...

      et pour la deuxieme cellule (41+43,15) la meme avec des coeff different
      =0,000422926446615346*D432 ^ 6 + -0,00497724132283774*D432 ^ 5 + 0,0208181663893719*D432 ^ 4 ...

      et cela pour chaque vitesse.. sachant que pour la vitesse d'apres ca sera D432 décaler de 6 colonne et pour celle d'apres decaler de 6 colonne mais sur la meme ligne 432 ...

      j'espere j'étais clair

      Merci d'avance
      0
  2. La ligne Dim vitesse As Byte sert à déclarer le type de la variable "vitesse".
    Ce type doit être adapté au mieux à la variable utilisée.
    La valeur de la variable étant un entier de valeur 0 à 7, tu peux définir un type Byte (limité à 255 maxi). J'aurais pu choisir un type Integer, Long ou Variant mais ce choix n'aurait pas été optimum.

    Pour ton second problème, je dois t'avouer que je n'ai pas bien compris.
    En l'état actuel, le programme copie des formules qui contiennent des adresses relatives.
    O41 contient une formule avec N39.
    Quand tu copies O41 dans F434, l'adresse devient normalement E432.
    Ce n'est pas ce que cherche à faire ?

    A+
    0
    1. voici un fichier de travail model j'ai ecrit un commentaire tout en bas de la ligne 434 je pense ca t'aidera mieux a comprendre ce que je cherche

      http://cjoint.com/13sp/CInptHrwc4O.htm

      Merci
      0
      1. Bonjour,

        Désolé, erreur de poste.
        0
        1. Bonjour,

          Si j'ai bien compris :
          Le débit à 100% (N41) doit être copié en E434, soit Cells(434,5) =Cells(41,14)
          Le débit à 90% (N84) doit être copié en K434 soit Cells(434,5+6) =Cells(41+43,14)
          Le débit à 80% (N127) doit être copié en Q434 soit Cells(434,5+2*6) =Cells(41+2*43,14)
          Etc... jusqu'au débit mini (7 valeurs de débit au total).

          Sub copier_coller()
          Dim vitesse As Byte
          For vitesse = 0 To 7
          With Worksheets("BLACK-BOOK")
          Cells(41 + 43 * vitesse, 14).Copy
          ActiveSheet.Paste Destination:=Cells(434, 5 + 6 * vitesse)
          End With
          Next vitesse
          End Sub

          A+
          0
          1. non pas tout a fait la condition n'est pas sur le debit, mais les 5 autres parametres qui suivent le debit pour chaque vitesse ( HMT, Potot, P&tot, P2 et N) ces parametre sont écrit en fonction du debit. et quand on les copie et on les colle bah la case débit change... il faut que quand on les colle il faut qu'ils soient en fonction de la nouvelle case du débit c'est a dire :
            Pour 100% : dans toutes les formule des 5 param doivent etre ecrit avec E434
            ( Hmt =0,0132557860879696*E434 ^ 6 + -0,188882303786579*E434 ^ 5...
            Potot =0,217578109574416*E434 ^ 6 + -3,01387999639787*E434 ^ 5 (DANS LA FORMLULE ACTUELLE Potot est =0,217578109574416*P434 ^ 6 + -3,01387999639787*P434 ^ 5...)
            donc voila faut que les 5 param soit ecrit en fonction du meme debit pour chaque vitesse...

            J'espere j'etais clair cette fois ci

            A plus
            0
          2. Le plus simple, c'est de copier les valeurs
            Sub copier_coller()
            Dim vitesse As Byte
            For vitesse = 0 To 7
            With Worksheets("BLACK-BOOK")
            Cells(41 + 43 * vitesse, 15).Copy 'Hmt(mCE)
            Cells(434, 6 + 6 * vitesse).PasteSpecial xlPasteValues
            Cells(41 + 43 * vitesse, 5).Copy 'P0tot
            Cells(434, 7 + 6 * vitesse).PasteSpecial xlPasteValues
            Cells(41 + 43 * vitesse, 11).Copy 'P1tot
            Cells(434, 8 + 6 * vitesse).PasteSpecial xlPasteValues
            Cells(41 + 43 * vitesse, 12).Copy 'P2
            Cells(434, 9 + 6 * vitesse).PasteSpecial xlPasteValues
            Cells(41 + 43 * vitesse, 13).Copy 'N
            Cells(434, 10 + 6 * vitesse).PasteSpecial xlPasteValues
            End With
            Next vitesse
            End Sub
            A+
            0
          3. merci Cyrus pour ta réponse mais effectivement ca aurait été plus simple de copier que les valeurs mais justement moi j'ai besoin de copier la derniere ligne dans un autre fichier et faut que je distingue la variation des parametres quand je change le debit...
            0
        2. Bonjour messin57000,
          C'est vraiment dommage que ce qui suit ne vous a servi à rien et pourtant une légère modification et cela fonctionne sur votre fichier.
          Remplacer votre ligne d'instruction par le bloc de lignes suivant:
          With Sheets("BOOK")
          For c = 1 To 4
          .Cells(27, c + 3).FormulaLocal = "=" & Cells(6, c + 10).Value & "*N26^6+" & Cells(7, c + 10).Value & "*N26^5+" _
          & Cells(8, c + 10).Value & "*N26^4+" & Cells(9, c + 10).Value & "*N26^3+" & Cells(10, c + 10).Value & "*N26^2+" _
          & Cells(11, c + 10).Value & "*N26^1+" & Cells(12, c + 10).Value
          Next c
          End With

          Bon dimanche

          0
          1. non pas du tout ca les valeur des case N26 c'est pas les bon et la ligne 27 aussi donc ca colle pas au fichier... et meme si j'essaye d'adapter au fichier le probleme est le meme c'est ecatement ce qu'on fait à ce jour mais le probleme c'est que les valeurs changent qd on copie colle la ligne dans un autre fichier
            0
        3. Bonjour,
          Eh bien là je ne vais pas insisté si vous n'arrivez pas à comprendre, c'est comme .... :
          https://www.commentcamarche.net/infos/25855-charte-d-utilisation-de-commentcamarche-net-respect-d-autrui/
          Salutations
          Le pingou

          0
          1. Je pense il y'a un mal entendu je comprends pas pourquoi vous m'envoyer le lien...
            Je pense pas vous avoir manquer du respect au contraire , je m'excuse si vous vous etes fais des idées le but quand meme c'est d'arriver au but voulu, c'est pas par plaisir que je conteste mais j'essaye d'éxpliquer ce que je veux, je m'exprime tres mal peut etre mais j'ai pas encore obtenus le résultat voulu...
            Je vous remerci quand même pour votre aide
            0
        4. Bonjour,

          Pourquoi cherches-tu à utiliser une macro pour reporter les formules en ligne 434 ?
          Tu pourrais placer ces formules une fois pour toute dans les cellules de la ligne 434 avec les adresses des coefficients correspondant aux débits.
          Exemple pour la Hmt avec un débit à 100% :
          =$AI$8 *$E$434 ^ 6 + $AI$9 *$E$434^ 5 + $AI$10 *$E$434^ 4 + $AI$11 *$E$434^ 3 + $AI$12 *$E$434^ 2 + $AI$13 *$E$434^ 1 + $AI$14

          A+
          0
          1. Bonjour Gyrus,
            Juste en marge... !
            Le l'ai déjà proposé dans un autre poste (même sujet), il n'en veux pas car une centaines de fichiers... !
            Bon courage.
            Salutations
            Le pingou
            0