VBA copier les données

Résolu/Fermé
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 - 29 mai 2014 à 16:44
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 - 4 juin 2014 à 21:36
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
A voir également:

10 réponses

ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
Modifié par ccm81 le 29/05/2014 à 17:17
Bonjour

Est ce que ceci commence à répondre à ta question?
(Ctrl+k pour lancer la copie)
https://www.cjoint.com/?3EDrraA4t5A

Cdlmnt
0
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
29 mai 2014 à 18:42
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
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
Modifié par ccm81 le 29/05/2014 à 19:06
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
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
Modifié par senecartour le 29/05/2014 à 21:31
Merci ccm81, c super!!
cela fonctionne!
Je vais l'adapter à mon cas
Encore merci infiniement
0
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
29 mai 2014 à 23:28
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
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
30 mai 2014 à 09:27
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
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
30 mai 2014 à 11:13
Avec quelques modifications
https://www.cjoint.com/?3EElnbO2vHz
0
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
30 mai 2014 à 23:54
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
30 mai 2014 à 21:07
Bonjour ccm81,
Vous êtes un génial!! franchement merci beaucoup!
et bon WE!
0
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
31 mai 2014 à 09:14
Il manquait surtout l'activation de la feuille à traiter
https://www.cjoint.com/?3EFjnSJhfwh

Cdlmnt
0
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
31 mai 2014 à 12:50
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
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
31 mai 2014 à 12:06
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
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
Modifié par ccm81 le 31/05/2014 à 14:07
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
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
31 mai 2014 à 18:08
Merci!!!! ça fonctionne bien:: on WE ccm81
0
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
2 juin 2014 à 15:37
Si c'est fini, peux tu mettre le sujet à Résolu (en haut à droite de ton premier message)

Bonne fin de journée
0
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
4 juin 2014 à 21:36
sLT ccm8,
désolé je pensais l'avoir fait!

0