VBA-Excel07:Suppression de colonnes après sélection d'une valeur

Résolu/Fermé
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - Modifié par cs_douda06 le 21/07/2014 à 17:43
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - 20 août 2014 à 22:12
Bonjour tout le monde,

J'ai sur une feuille un tableau croisé feuille/colonne, pour chaque feuille si l'on sélectionne YES rien ne se passe, mais si l'on sélectionne NO je voudrai que les colonnes correspondantes dans les autres feuilles du classeur soient supprimées.

J'ai mis un exemple plus clair dans ce fichier Excel sur ce lien : http://cjoint.com/14ju/DGvn4lVzQhI.htm

J'ai ajouté un bouton pour contenir la macro, sauf que je ne sais pas par où commencer :$

Pourriez vous m'aider sur ce sujet, toute aide est la bienvenue.
Merci

10 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 22/07/2014 à 13:08
Re,

Pas besoin de bouton, voici le code à placer
dans le module de la feuille"Feuille X" :
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, [B2:E5]) Is Nothing Then Exit Sub
  If Target.Count > 1 Then Exit Sub
  If Target.Value = "YES" Then Exit Sub
  Call Supprime_Colonnes(Target.EntireRow.Cells(1, 1).Value, _
                         Target.EntireColumn.Cells(1, 1).Value)
End Sub

Private Sub Supprime_Colonnes(feuille As String, colonnes As String)
Dim i As Long
  
  With Worksheets("Feuille " & feuille).UsedRange.Rows(1)
    For i = .Cells.Count To 1 Step -1
      If InStr(1, .Cells(1, i).Formula, colonnes) = 1 Then
        .Cells(1, i).EntireColumn.Delete
      End If
    Next i
  End With

End Sub

Cordialement
Patrice
1
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
22 juil. 2014 à 13:55
Supeeeeeer...merci beaucoup Patrice, c'est exactement ce que je cherchais.. bonne journée :)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
22 juil. 2014 à 13:58
De rien, au plaisir de te relire sur le Forum

Cordialement
Patrice
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
31 juil. 2014 à 03:22
Bonjour Patrice,
Pourrais tu m'aider stp sur le même sujet mais en integrant cette fonctionnalité dans une macro ?
J'ai déjà une macro qui crée des feuilles automatiquement, et je voudrai qu'après avoir selectionné les NO, et cliqué sur le bouton exécutant cette macro, que les feuilles soient générées sans les colonnes . càd que la suppression des colonnes se fasse apres la génération de ces feuilles. Est ce faisable avec le même code?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
1 août 2014 à 23:51
Bonsoir,

Tu n'as pas mis d'explications sur le mode d'emploi et le mode de fonctionnement désiré !
J'ai donc essayé de comprendre ce que tu voulais faire, en analysant ton code mais comme ça fonctionne mal ....

J'ai tout repris, avec des commentaires dans le code, voici le fichier :
https://www.cjoint.com/c/DHbxTjj2wWS
1
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
2 août 2014 à 01:36
OUAAA :D... c'est même mieux que ce que je voulais, je n'avais pas pensé à l'option d'ajout des noms des feuilles dans feuilleX automatiquement pour moi cette partie se faisait manuellement, mais j'aime comment c'est automatisé, de plus pour les YES/NO j'aime bien le fait que tu as gardé la 1ere fonctionnalité càd supprimer les colonnes apres la création des feuilles, et tu as ajouté celle que j'ai proposé de supprimer les colonnes lors de leur création. je vais essayé de comprendre le "comment" mnt... Je te remercie infiniment Patrice, c'est super gentil de ta part :)
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
13 août 2014 à 11:34
Bonjour Patrice,
une derniere demande stp :)
J'ai ajouté une nouvelle colonne qui fait référence a 2 feuilles valA et valB,
Dans la feuille "Donnees" si on a valA et YES pour des lignes, je voudrai qu'une macro aille dans cette feuille valA et récupére les valeurs qui se trouve dans tout le range E:W et les collent dans les feuilles précedemment générées (aaa1, eee2 ..etc).

Même chose si la valB et YES sont selectionnés.

N.B:il se peut qu'il y'a 2 champs semblables où un se trouve dans la feuille varA et l'autre dans varB (car leur données dans le range E:W peut différer).

+ On peut ajouter ces modifications soit dans la marco déjà existante "RemplirFeuille" soit dans un nouveau bouton.

J'avais déja essayé de créer la macro dans un nouveau bouton, mais je me perd enormément :/

Peux tu m'aider stp? merci
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
20 août 2014 à 19:31
Bonjour,

Voici le fichier en retour :
https://www.cjoint.com/c/DHutEpt3NNC
1
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
22 juil. 2014 à 11:33
Aucune aide sur ce sujet? S'iiiil vouuus plaaaaait HELP :( :(
0

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

Posez votre question
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
22 juil. 2014 à 11:42
Supprimées ou effacées ???
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
22 juil. 2014 à 11:58
Supprimées carrément :)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
31 juil. 2014 à 10:06
Bonjour cs_douda06,

Remplace la procédure
Private Sub Worksheet_Change(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Dim c As Range
  Set r = Intersect(Me.UsedRange, Me.UsedRange.Offset(1, 1))
  If Intersect(Target, r.Cells) Is Nothing Then Exit Sub
  For Each c In Intersect(Target, r.Cells).Cells
    If c.Value = "NO" Then
      Call Supprime_Colonnes(c.EntireRow.Cells(1, 1).Value, c.EntireColumn.Cells(1, 1).Value)
    End If
  Next c
End Sub
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
31 juil. 2014 à 20:17
Merci pour ta réponse, Alors j'ai essayé de placer ce code après le code de la macro, ça ne change rien (les colonnes selectionnées ne sont pas supprimées), et si j'enleve le "sub" il me pose erreur dans le "me".usedRange .. J'ai surement mal placé la procédure. Comment puis je integrer cette procédure au "Sub" déjà existant de ma macro ? càd exécuter le sub generant les feuilles et juste apres excuter le sub qui sert à supprimer les colonnes.?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 31/07/2014 à 20:42
Il ne faut pas mettre ce code dans ta macro ni dans un module simple mais remplacer toute l'ancienne macro
Private Sub Worksheet_Change(ByVal Target As Range)
que je t'avais proposée en #4, située dans le module de la "Feuille X", par la nouvelle macro ci -dessus.

Cela mettra à jour les feuilles automatiquement à condition que tu créé les nouvelles feuilles avant de mettre à jour les NO correspondants sur la Feuille X
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
31 juil. 2014 à 21:29
Oui en fait c'est cela que je dois changer, l'utilisateur doit d'abord selectionner les NO, et ensuite cliquer sur le bouton pour generer les feuilles sans les colonnes. C'est pourquoi j'ai pensé inclure ce code dans la macro existante. Quand je teste avec le dernier code il tombe en erreur puisqu'il ne trouve pas les feuilles. :( helpppp
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 31/07/2014 à 23:06
JE RÉPÈTE : pour que ça fonctionne, il faut que les feuilles sont créées avant d'écrire leur nom et les YES ou NO dans la feuille X
Autrement dit, il faut que ta macro ajoute d'abord la nouvelle feuille et ensuite mette à jour la ligne correspondante dans la feuille X
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
1 août 2014 à 00:38
Donc pas possible? Pas moyen de le faire implicitement, faire appel à la suppression des colonnes directement après la création des feuilles?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
13 août 2014 à 12:18
Bonjour,

Avec le fichier ce sera plus simple
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
13 août 2014 à 12:39
Oui le voilà sous: http://www.cjoint.com/data/0HnmJK0aGIr.htm
Merci
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
13 août 2014 à 14:27
Il y a un problème avec la colonne commentaire qui contient certaines données dans la feuille Données et d'autres dans la nouvelle feuille (valA ou valB),.
Pourquoi deux commentaires différents ? Comment doit-on les traiter ? Lequel est le bon ?
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
13 août 2014 à 14:49
En fait les colonnes qui sont sur la feuille varA et varB sont les mêmes que sur les feuilles générées (aaa1 eee2...), donc le but c'est que le contenu du range ("E":"W") de la feuille varA soit copié dans le range ("E":"W") des feuilles aaa1, eee2...quand c'est (VRAI + varA)
idem pour (VRAI + varB).

la colonne Commentaire de la feuille "données" n'aura aucun role, et ne sera pas copié.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
13 août 2014 à 18:04
Re,

Après l'ajout individu,
'- ajouter l'individu
d.Resize(1, nbC_Id).Value = c.EntireRow.Cells(1, "A").Resize(1, nbC_Id).Value
il faut ajouter les données de la feuille var (et déclarer la nouvelle variable w)
'- ajouter les données de la feuille var
On Error Resume Next
Set w = Worksheets(c.EntireRow.Cells(1, colSrc).Value)
On Error GoTo 0
If Not w Is Nothing Then
  d.EntireRow.Cells(1, colVal).Resize(1, nbC_Val).Value = _
      w.Cells(2, colVal).Resize(1, nbC_Val).Value
End If

Voici le fichier modifié :
https://www.cjoint.com/?DHnrUjfPBVg

Cependant, il me semble que tu n'as pas fait une analyse globale de ce que tu voudrais et donc tu écris le cahier des charges au fur et à mesure de l'avancement du projet !
C'est une mauvaise approche, car à force de poser les cataplasmes les uns sur les autres on obtient une véritable usine à gaz et on finit par être obligé de tout reprendre à zéro.

--
Cordialement
Patrice
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
16 août 2014 à 02:14
En fait c'est le client qui demande a chaque fois des changements :s
J'ai testé en plusieurs reprises en appliquant ton code sur mon fichier, je vois que les données sont répétées, ou mal récupérés ... je vois que les données de la première ligne sont répétées dans d'autres lignes, et ne prend pas les valeurs des 2 feuilles varA ou varB comme il faut.
Je vais essayer de plonger encore plus pour voir d'ou vient le souci...
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
19 août 2014 à 00:33
Bonjour Patrice,
Je me permets de te déranger encore une fois :) . En fait selon ce que j'ai compris, les lignes à copier depuis varA et varB sont copiés par ordre descendant, meme si je ne sais pas pourquoi il sont dupliquées dans plusieurs lignes !!
Est t il possible d'ajouter une condition qui permet de:
-Parcourir chaque valeur de la colonne A ligne par ligne
-Comparer cette valeur par celle de la colonne A de la feuille varA/varB, si les valeurs sont semblables, copier tout le range E:W dans les feuilles a générer.
Comme ça les données de VarA et VarB seront cohérent avec le champ "Nom" correspondant de la feuille "Données".
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
19 août 2014 à 09:16
Bonjour,

Je ne comprends pas ton problème !!!
« les lignes à copier depuis varA et varB » : dans VarA ou Varb il n'y a qu'une seule ligne !

«sont copiés par ordre descendant » : il n'y a qu'une ligne donc li n'y a pas d'ordre !

«Comparer cette valeur par celle de la colonne A de la feuille varA/varB» : Il n'y a aucune valeur dans la colonne A de VarA / VarB !

Peux tu mettre ton classeur avec les feuilles générées et des explications détaillées de ce qui ne va pas et de ce que tu attends.

Cordialement
Patrice
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
19 août 2014 à 15:20
Salut,
J'ai déposé le fichier avec toute explication sous http://cjoint.com/data/0Htps1K7alB.htm
Merci beaucoup :)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
19 août 2014 à 15:53
Re,

Ce fichier n'a plus rien à voir avec le précèdent, tu comprends donc pourquoi j'ai demandé de faire une analyse globale du problème !!!

En outre, les explications fournies sont très insuffisantes :

Plusieurs champs de la feuille Données et des Feuilles VarA et VarB ne sont pas renseignés, resteront-ils vides ? Si oui, pourquoi existent-ils ?

Quels sont exactement les champs à copier à partir de Données et ceux à partir de VarA / VarB ?

Les feuilles VarA et VarB possèdent des intitulés de champs différents, comment doit-on les intégrer dans les feuilles ?

Dans la mesure où certains renseignements existeraient dans plusieurs sources, laquelle sert de référence ?

Une fois ce résultat obtenu, le fichier sera-t-il quasi définitif ou doit-on s'attendre à d'autres révolutions ?

Patrice
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
20 août 2014 à 22:12
Merci beaucoup Patrice, oyyy c'est PARFAIT, correcte et exactement ce que je cherchais. merci enormément :) :):)
0