VBA copier les données

Résolu
senecartour Messages postés 391 Statut Membre -  
senecartour Messages postés 391 Statut Membre -
Bonjour à tous,

Je me tourne vers vous parceque cela fait un moment que je cherche une solution à mon problème.
J'ai crée les codes en VBA mais cela ne fonctionne pas.

Explication:
J'ai un classeur avec plusieurs onglets et je souhaiterais copier les palges de certains onglets vers d'autres onglets.
La difficulté résiste sur le fait que les plages sources ne sont pas fixes elles varient au fil de l'eau.

Pour mon cas, je souhaiterais coder de cette façon et j'ai commencé comme suite:
-je définie, la première ligne de la plage
-je définie la dernière ligne de la plage
-je définie la première colonne de la plage
-je définie la dernière colonne de la plage
-je définie ma plage de cette façon ("premiereligne&dernièreligne:premierecolonne&dernierecolonne")

Ensuite, j'utilise cette plage que je vais copier depuis les onglets sources vers les onglets cibles.

Je vous joins le fichier: https://www.cjoint.com/?DEDqOqCzIQs
Merci beaucoup pour votre aide

--
Partager son savoir est la meilleure façon d'apprendre!

10 réponses

  1. senecartour Messages postés 391 Statut Membre 3
     
    Merci ccm81, cela semble correspondre à la façon dont je souhaiterais coder. Cependant la macro beug. Après exécution, je reçoi le message d'erreur "entête non trouvé".
    Sauriez-vous, les raisons?
    Merci pour votre retour
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      La procedure Kopier a comme paramètres
      - le nom de la feuille à copier : nf
      - l'en tête du tableau à copier : et
      Dans ton exemple, elle va être appelée deux fois par la procédure FKopier (c'est elle qui lance Kopier) en lui passant successivement les valeurs
      - "donnees" pour le nom de la feuille et "Pays" pour l'en tête du tableau
      et
      - "Situation" pour le nom de la feuille et "Pays" pour 'e'n tête du tableau
      C'est à toi de modifier ces valeurs dans la procédure FKopier

      Public Sub FKopier()
      Call Kopier("donnees", "Pays")
      Call Kopier("Situation", "Pays")
      End Sub

      Public Sub Kopier(nf As String, et As String)
      Dim lideb As Long, codeb As Long, lifib As Long, cofin As Long, ad As String
      Dim c As Object, plage As Range
      Sheets(nf).Activate
      Set c = Cells.Find(et)
      If c Is Nothing Then
      MsgBox "en tête " & et & " non trouvée dans la feuille " & nf
      Exit Sub
      Else
      lideb = c.Row
      codeb = c.Column
      lifin = Cells(Rows.Count, codeb).End(xlUp).Row
      cofin = Cells(lideb, Columns.Count).End(xlToLeft).Column
      Set plage = Range(Cells(lideb, codeb), Cells(lifin, cofin))
      plage.Copy Sheets("Rep_" & nf).Cells(lideb, codeb)
      End If
      End Sub

      Cdlmnt
      0
    2. senecartour Messages postés 391 Statut Membre 3
       
      Merci ccm81, c super!!
      cela fonctionne!
      Je vais l'adapter à mon cas
      Encore merci infiniement
      0
    3. senecartour Messages postés 391 Statut Membre 3
       
      Bonsoir ccm81,
      désolé de revenir vers vous, j'ai analysé votre macro, il est certainement adaptable dans le cadre de certain de mes outils à réaliser plus tard mais pas exactement pour ce que je recherche actuellement.

      J'ai essayé de l'adapter mais ce qui me gène c'est la prise en compte des entêtes dans la macro.
      Ce que je souhaiterais c'est de définir les plage à copier avec
      -lideb
      -coldebu
      -lifin
      -colfin
      ensuite je définie mon plage (variable) avec ces limites
      -j'utilise en suite la plage pour les copies dans les onglets cibles.

      J'ai essayé de créer un code qui me permet d'effacer les plages copier dans les ognlets cibles sans effacer les entêtes.
      En gros les entêtes que ça soit les onglets sources ou cibles ne doivent pas être bougées, elles sont fixes. Seules les données sont à copier.

      J'ai bien avancé dans la création des codes, mais après l'exéxution des macro copier et effacer, il y a rien qui fonctionne.
      J'ai essayé de comprendre ce qui ne va pas, en vain. Comme je débute en macro, je rencontre des difficultés pour réussir certains codes.
      Je compte vraiement sur votre aide, pour m'aider à réaliser ce fichier. Car, je dois le rendre, pour mon stage et c'est très intéressant pour ma carrière.
      Je vous joins le nouveau fichier: https://www.cjoint.com/c/DEDxA7j2w0r
      Merci encore et désolé pour le dérangement
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Voilà déjà pour la copie,

    Option Explicit

    ' adresse cellule debut plage à copier
    Const lideb = 11
    Const codeb = 2

    Public Sub appelcopier()
    'Je copie les données des onglets donnes vers Rep_donnees et Situation vers Rep_Situation
    copier "donnees", "Rep_donnees"
    copier "Situation", "Rep_Situation"
    End Sub

    ' procedure qui copie la plage (lideb, codeb,lifin, cofin) de la feuille source dans la feuille but
    Public Sub copier(FeuilleSource As String, FeuilleBut As String)
    Dim lifin As Long, cofin As Long
    Dim plage As Range
    Sheets(FeuilleSource).Activate

    'Je définie les limites de ma plage
    lifin = Cells(Rows.Count, codeb).End(xlUp).Row
    cofin = Cells(lideb, Columns.Count).End(xlToLeft).Column

    'Je définie ma plage avec les limites définie précédemment
    Set plage = Range(Cells(lideb, codeb), Cells(lifin, cofin))

    'Je copie la plage définie
    plage.Copy Sheets(FeuilleBut).Cells(lideb, codeb)

    End Sub

    là je dois débrancher!

    Cdlmnt
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Avec quelques modifications
    https://www.cjoint.com/?3EElnbO2vHz
    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Bonsoir ccm81,
      Je suis désolé de revenir vers vous. Mais comme c'est vous qui m'a aidé à résoudre mon problème, je me dis que ce serait bien de continuer avec vous. Au fait j'ai passé une grande partie de la soirée pour faire l'autre partie de ma macro consistant à effacer les données des onglets "Rep_donnees" et "Rep_situation" avec un bouton.

      J'ai essayé de suivre la même démarche que dans la partie dopier avec la définition des plages en affectant cette fois à la plage la méthode plage.Clearcontents.
      Mais rien ne fonctionne et je suis vraioement bloqué!
      Poiurriez-vous, SVP me regarder juste ce qui ne va pas dans cette partie ( voir module effacer dans la macro).
      Je vous joins le fihcier: https://www.cjoint.com/?DEEx1iIVOxp
      Merci d'avance pour votre aide!
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. senecartour Messages postés 391 Statut Membre 3
     
    Bonjour ccm81,
    Vous êtes un génial!! franchement merci beaucoup!
    et bon WE!
    0
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Il manquait surtout l'activation de la feuille à traiter
    https://www.cjoint.com/?3EFjnSJhfwh

    Cdlmnt
    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Bonjour ccm81,
      Désolé de revenir sans cesse vers vous! J'étais en dernière phase de la mise en place de mon fichier.
      Je constate que je dois copier les données en valeur.
      J'ai essayé d'ajouté cette ligne: Selection.PasteSpecial Paste:=xlPasteValues Sheets(Feuillecible).Range(Cells(lideb, codeb)).Activate
      Mais ma macro ne fonctionne pas pour la copie en valeur. Pourriez-vous me dire si j'ai sauté une étape?
      Je vous joins également le fichier en question: https://www.cjoint.com/?DEFmX3GEtsV
      Merci encore d'avance!
      0
  7. senecartour Messages postés 391 Statut Membre 3
     
    Merci bcp ccM81, c'est très bien. Au fait je n'avais pas du tout pensé à l'activation de la feuille:). Je ne suis pas expert en VBA je suis entrain de monter en compétence la dessus. J'ai vraiement des choses avec vous.
    Merci sans limite!
    Et surtout bravo pour votre disponibilité et e compétences!
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Essaies ceci

    'Je copie la plage définie
    'plage.Copy Sheets(Feuillecible).Cells(lideb, codeb)
    plage.Copy
    Sheets(Feuillecible).Activate
    Cells(lideb, codeb).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Merci!!!! ça fonctionne bien:: on WE ccm81
      0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Si c'est fini, peux tu mettre le sujet à Résolu (en haut à droite de ton premier message)

    Bonne fin de journée
    0
  10. senecartour Messages postés 391 Statut Membre 3
     
    sLT ccm8,
    désolé je pensais l'avoir fait!

    0