Transposer des lignes vers une autre feuille

RoverMan Messages postés 9 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 19 juillet 2012 - 4 juil. 2012 à 22:54
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 6 juil. 2012 à 10:22
Bonjour tout le monde,

Voila je suis un peu coincé en VBA et j'aurai besoin de votre aide pour avancer dans un projet.

Ce que j'aimerai faire c'est une macro capable de copier les cellules des lignes d'un tableau, seulement si ces lignes sont cochées.

En fait j'ai déjà réalisé une maquette de tableau avec des cases à cocher, je pensais utiliser la réponse de ces cases à cocher dans leurs cellules liées respectivement pour ordonner, ou non, la copie de la ligne vers une autre feuille du même classeur.

Sachant également que le nombre de lignes dans le premier tableau n'est pas définit.

Je pense donc que le plus simple serait de balayer les lignes une par une et de vérifier si la réponse de "La case est-elle cochée ?" serve de condition au copier-coller.

Est-ce que vous pouvez m'éclairer en me donnant une base de code pour faire ce que j'ai à faire. Si vous avez d'autres idées capables de satisfaire mes besoin n'hésitez pas !! :)

Merci beaucoup.

12 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 juil. 2012 à 01:33
Salut

Les objets déposés sur des feuilles sont de type "Shape".
Ils appartiennent à la collection "Shapes"
A partir de là, suffit de regarder l'aide pour en déduire un petit code simple :
    Dim oShape  As Shape
    Dim oRange  As Range
    
    For Each oShape In ActiveSheet.Shapes
        If oShape.Name Like "Check Box *" Then
            Set oRange = oShape.TopLeftCell
            Debug.Print oShape.Name, oRange.Row, oRange.Column
        End If
    Next

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 juil. 2012 à 01:34
PS : Tu fais du VBA, pas du VB.Net (catégorie)
0
RoverMan Messages postés 9 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 19 juillet 2012
5 juil. 2012 à 09:32
Bonjour,

Alors ce que j'ai compris de ton code :

Dim oShape  As Shape '
Dim oRange  As Range 'déclaration des variables
    
    For Each oShape In ActiveSheet.Shapes 'pour chaque case à cocher dans la feuille active
        If oShape.Name Like "Check Box *" Then 'si le nom de la case à cocher est du type ""
            Set oRange = oShape.TopLeftCell 'la variable oRange prend les coordonnées de la case à cocher
            Debug.Print oShape.Name, oRange.Row, oRange.Column 'colle le nom, la ligne et la colonne de la case oRange
        End If
    Next


Mais le code n'indique pas où les lignes doivent être collée, du coup ca serait pas un truc du genre :
Dim oShape  As Shape
Dim oRange  As Range

    For Each oShape In Sheets(1).Shapes
        If oShape.Name Like "Check Box *" Then
            Set oRange = oShape.TopLeftCell
            Sheets(2).Select
            Debug.Print oShape.Name, oRange.Row, oRange.Column
        End If
    Next
End Sub


Et je ne vois pas comment ce code vérifie si la case à cocher est cochée.

Pas facile d'avancer quand on a presque pas de base :/
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 juil. 2012 à 10:55
Salut,

Sub Demo()
Dim MonOLEObjt As OLEObject, MaPlage As Range
    For Each MonOLEObjt In ActiveSheet.OLEObjects
        If TypeOf MonOLEObjt.Object Is msforms.CheckBox Then
            If MonOLEObjt.Object.Value = True Then
                If MaPlage Is Nothing Then
                    Set MaPlage = MonOLEObjt.TopLeftCell
                Else
                    Set MaPlage = Union(MaPlage, MonOLEObjt.TopLeftCell)
                End If
            End If
        End If
    Next
End Sub


la méthode union est limitée à 255 plages non contigus

A+
0

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

Posez votre question
RoverMan Messages postés 9 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 19 juillet 2012
5 juil. 2012 à 11:34
Salut bigfish,

J'ai essayé ton code mais petit problème : "Type défini par l'utilisateur non défini"

J'ai essayé d'activer la bonne bibliothèque mais ça ne change rien.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 juil. 2012 à 11:46
re,

J'ai essayé ton code mais petit problème : "Type défini par l'utilisateur non défini"


quelle variable ?

tu travailles sur quelle version d'excel ?

à tu testé ce code sans le modifier ?

Si tu l'as modifié donne le code avec les modifs !

A+
0
RoverMan Messages postés 9 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 19 juillet 2012
5 juil. 2012 à 11:50
Selon le rapport d'erreur c'est le MonOLEObjt qui foire.

Je travail avec Excel 2007.

J'ai testé le code sans rien modifier.

Merci
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 juil. 2012 à 12:27
Le code proposé énumère tous les Shapes présents sur ta feuille.
Un Shape peut aussi être n'importe quel autre objet, d'où l'utilité de filtrer le type CheckBox.
Les lignes à l'intérieur du If te fournissent :
- le nom de l'objet (si besoin)
- la ligne et la colonne de la cellule sur laquelle la CheckBox est positionnée.

Tes histoires de copier-coller sont des choses simples à réaliser grâce à l'utilisation des éléments proposés.
A toi de regarder dans l'aide et d'affiner.

Normalement, en effet, ces objets sont des OLEObjects, mais je n'ai pas réussi (non plus) à définir les types dans les Dim - d'où l'utilisation des Shapes.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 juil. 2012 à 13:34
re,

il faut cocher la reference "Microsoft Forms 2.0 Object Library"

c'est le fichier "FM20.dll"

A+
0
RoverMan Messages postés 9 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 19 juillet 2012
5 juil. 2012 à 15:02
D'accord Jack j'ai bien compris ton code mis à part le "Check Box *". Pourquoi il y a un * ?
Sinon, où se trouve l'aide ?

Merci Bigfish, j'ai modifié, ca ne me met pas de message d'erreur. Par contre j'ai du mal à saisir le dernier If avec "Is Nothing" jusque "Union".

Sinon me reste à faire la partie collage pour confirmer si ca marche. Je te tient au courant.

Je vous remercie
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 juil. 2012 à 16:06
pour l'aide tu places le curseur sur mot qui t’intéresse et tu appuis sur la touche F1

entraîne toi avec nothing et union.


A+
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2012 à 10:22
... Like "le texte *" ...
parce que, par défaut, les "cases à cocher" s'appellent "Check Box 1", "Check Box 2" etc donc, comme on se base sur le nom de l'objet dans cette méthode, le '*' remplace le n°
0
Rejoignez-nous