VBA_Collage spécial d'une colonne "sous condition" sur une autre feuille excel

mouncefdi Messages postés 1 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 10 mars 2009 - 10 mars 2009 à 17:32
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 - 18 mai 2009 à 21:23
salut le forum,

Je suis un débutant en VBA, mais connaissances sont très limitées, ci-dessous je vous explique ce que je souhaite faire en espérant que quelqu'un pourra m'éclairer.

Je souhaite faire un copier/coller spécial (copier la colonne Z d'une feuille 1 et la coller sur la ligne 1 à partir de la colonne D sur une feuille 2).

Sur la feuille 1 de mon excel :

Dans un premier temps je dois automatiser la création de cette colonne Z qui correspond à la concaténation des colonnes G jusqu'à Q si la condition suivante est respectée : les cellules de la colonne X = Main.

Dans un second temps je veux classer cette colonne afin d'éliminer les doublons un à un (car dans mon cas les concaténations peuvent avoir le même nom).

Sur la feuille 2 de mon excel :

Finalement je souhaite faire un collage spécial de la colonne Z sur la ligne 1 à partir de la colonne D d'une autre feuille (feuille 2).

Comment je pourrais faire pour coder cela ?

<!-- / message -->

9 réponses

cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
11 mars 2009 à 00:50
Bonsoir
cela concerne la copie de la colonne Z vers la colonne D de la feuille 2


Range("z:z").Copy Sheets("Feuil2").Range("d1")



CNTJC
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 1
15 mai 2009 à 20:32
bonjour,je me permet de venir poser une petite question a cnt jc qui m'a l'air tres competant en vba,


moi j'ai un meme genre de probleme sauf que la colonne de la feuil 2 (ou je dois coller )n'est pas connu a l'avance,je m'explique :


dans mons userform j'ai 14 checbox qui represente les 14 colonnes de ma feuil1 donc je peux decider quelle colonne que je copie mais il me faudrai et c'est la que je coince que les colonnes se copie les une apres les autres sans colonne vide entre les deux


exemple si je selectionne la colonne 1,la colonne 5 et la colonne 8


il doit me copier dans la feuil2 la colonne1 dans la colonne1 ,la colonne 5 dans la colonne2 et la colonne 8 dans la colonne 3


je crois que mes explication sont suffisement clair et j'espere qu'une personne pourras m'aider


merci


 
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
16 mai 2009 à 01:22
salut PHILOCHARD
je te propose cette solution, à toi de voir si ça te convient

Private Sub CommandButton1_Click()

Dim obj As Control, i As Byte, j As Byte
i = 0
j = 0

For Each obj In Me.Controls
    If TypeName(obj) = "CheckBox" Then
        i = i + 1
        If obj.Value = True Then
            j = j + 1
            Sheets("Feuil1").Range("a:a").Offset(0, i - 1).Copy Sheets("Feuil2").Range("a:a").Offset(0, j - 1)
        End If
    End If
Next
End Sub

CNTJC
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 1
17 mai 2009 à 13:24
désolé cnt jc soit je n'ai pas tout compris ou alors il doit y avoir un probleme dans le code je t'explique
j'ai copier le code que tu m'a donné ci dessus dans le bouton pour lancé l'impression mais le probleme c'est qu'il ne copie pas les colonnes dans la feuil 2
Private Sub impression_Click()

Dim obj As Control, i As Byte, j As Byte
i = 0
j = 0

For Each obj In Me.Controls
    If TypeName(obj) = "CheckBox" Then
        i = i + 1
        If obj.Value = True Then
            j = j + 1
            Sheets("Feuil1").Range("a:a").Offset(0, i - 1).Copy Sheets("Feuil2").Range("a:a").Offset(0, j - 1)
        End If
    End If
Next
sheets("feuil2").printout
End Sub
voici comment je l'ai encodé donc si tu peux voir pourquoi cela m'aiderai beaucoup merci

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

Posez votre question
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
18 mai 2009 à 10:46
Bonjour
Je confirme que ça fonctionne chez moi avec l'impresssion de la feuille copiée.
Est-ce que les CheckBox correspondent bien par leurs index à chaque colonne par leur numéro?
J'apporte une modification dans l'instruction de copie des données plus simple.

Dim obj As Control, i As Byte, j As Byte
i = 0
j = 0

For Each obj In Me.Controls
    If TypeName(obj) = "CheckBox" Then
        i = i + 1
        If obj.Value = True Then
            j = j + 1
            Sheets("Feuil1").Columns(i).Copy Sheets("Feuil2").Columns(j)
        End If
    End If
Next
Sheets("feuil2").PrintOut
CNTJC
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 1
18 mai 2009 à 14:44
excuse moi CNT je suis lourd dingue mais tout ce code je dois donc le copier autant de fois que j'ai de checkbox et renommé

If TypeName(obj) = "CheckBox" Then

par

If TypeName(obj) = CheckBox1 Then
et ainsi de suite jusque checkbox14

le tout dans mon bouton
c'est bien ça?
encore désolé pour l'idiotie qui a une part importante chez moi
mais je me suis lancé dans un projet et je m'apercois que j'ai encore beaucoup de chose a apprendre en vba
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
18 mai 2009 à 18:40
Re
Ce code est valable pour toutes les "cases à cocher", grâce à la boucle "For ... Next"
Ma question portée sur la correspondance entre les numéros d'ordre de ces cases et les colonnes de la feuille2 ==> CheckBox1 >> Colonne(1), CheckBox2 >> Colonne(2), etc...
Voici le code revu et corrigé pour le bouton "impression"

Private Sub impression_Click()
Dim obj As Control, i As Byte, j As Byte, m As Byte
i = 0
j = 0
For Each obj In Me.Controls
 If TypeOf obj Is MSForms.CheckBox Then
  i = i + 1
  If obj.Value = True Then
   j = j + 1
   Sheets("Feuil1").Columns(i).Copy Sheets("Feuil2").Columns(j)
  End If
 End If
Next
Sheets("Feuil2").PrintOut
End Sub

bonne continuation

CNTJC
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 1
18 mai 2009 à 20:12
CNT je voulais te dire un tres tres grand MERCI ,le code et les explications que tu m'a fourni fonctionnent bien et maintenant je vais pouvoir terminer mon programme
il s'agit en fait d'un programme pour classé une multitude de collection parametrable a souhait

je voudrai te demander une derniere faveur

je te donne mon e-mail poiur que tu m'envoi le tien comme ca je t'enverai un lien pour le telecharger via mégaupload ainsi tu pourras me dire ce que tu pense de mon prog
cs_PHILOCHARD Messages postés 6 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 12 septembre 2009 1
18 mai 2009 à 21:23
mon e mail est [mailto:jaushua@hotmail.com jaushua@hotmail.com]
Rejoignez-nous