Copier coller si...

Lils_Bis Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -  
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Plusieurs jours que je me penche sur un problème que je n'arrive pas à résoudre et c'est pour ça que je me tourne vers vous en espérant qu'un de vous puisse me venir en aide ☺.

Voilà mon problème. J'ai un nombre de colonnes qui peut varier (tout comme mon nombre de ligne) selon les fichiers. Ma deuxième ligne comporte que pour chaque colonne oui ou non. Je voudrais copier toutes les colonnes où l'on retrouve oui en deuxième ligne. Et une fois cette sélection faite, je souhaiterais les coller dans une feuille "oui" (que j'ai déjà créée).

Je pense pas que ça soit bien compliqué mais je bloque totalement !

En vous remerciant par avance tou(te)s ! :)


A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Lils, bonjour le forum,

Le code commenté (à adapter) ci-dessous devrait fonctionner :

Sub Macro1()
Dim D  As Worksheet 'déclare la varaible D (onglet Données)
Dim O  As Worksheet 'déclare la varaible O (onglet Oui)
Dim TV As Variant 'déclare la varaible TV (Tableau des Variables)
Dim I As Integer 'déclare la varaible I (Incrément)
Dim DEST As Range 'déclare la varaible DEST (cellule de DESTination)

Set D = Sheets("Données") 'définit l'onglet D (à adapter à ton cas)
Set O = Sheets("oui") 'définit l'onglet O
O.Cells.ClearContents 'efface d'éventuelles anciennes données
TV = D.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 2) 'boucle sur toutes les colonnes I du tableau des valeurs TV
    If TV(2, I) = "oui" Then 'condition : si la valeur en ligne 2 de la colonne I est égale à 2
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la premiere cellule vide de la ligne 1 de l'onglet "oui")
        Set DEST = IIf(O.Range("A1") = "", O.Range("A1"), O.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
        DEST.Resize(UBound(TV, 1), 1).Value = Application.Index(TV, , I) 'revoie la colonne dans DEST
    End If 'fin de la condition
Next I 'prochaine colonne de la boucle
End Sub

0
Lils_Bis Messages postés 57 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour ThauTheme,
Merci pour ta solution, ton temps et désolé de ma réponse tardive...

Je l'ai testé après quelque modifications mais ça ne fonctionne pas.
Ca bloque à la ligne suivante :

DEST.Resize(UBound(TV, 1), 1).Value = Application.Index(TV, , I) 'renvoie la colonne dans DEST


Avec comme message d'erreur, le suivant : "ERREUR D'EXECUTION '13': Incompatibilité de type"

Vois-tu d'où cela peut provenir ?

Merci encore à toi !
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Lils, bonjour le forum,

Sans fichier difficile de trouver ce qui ne va pas. Regarde la pièce jointe qui fonctionne avec le code proposé. Clique sur le bouton Envoyer...

https://www.cjoint.com/c/FEFjQGkh68I
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Lils, bonjour le forum,

Comme tu n'as pas précisé le nom de l'onglet qui contenait les données je l'ai appelé Données dans le code et j'ai mis entre parenthèses qu'il te fallait adapter ce nom à ton cas. L'as-tu fait ?
0
Lils_Bis Messages postés 57 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, j'ai bien modifié comme tes commentaires le spécifiaient mais rien à faire... J'ai cherché où était l'erreur mais je sèche totalement sur ce coup ! Vois-tu autre chose ?
0