VBA-Excel07:Suppression de colonnes après sélection d'une valeur
Résolu
cs_douda06
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
cs_douda06 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
cs_douda06 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- VBA-Excel07:Suppression de colonnes après sélection d'une valeur
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
10 réponses
Re,
Pas besoin de bouton, voici le code à placer
dans le module de la feuille"Feuille X" :
Cordialement
Patrice
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
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
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
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 :)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour cs_douda06,
Remplace la procédure
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
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.?
Il ne faut pas mettre ce code dans ta macro ni dans un module simple mais remplacer toute l'ancienne macro
Cela mettra à jour les feuilles automatiquement à condition que tu créé les nouvelles feuilles avant de mettre à jour les NO correspondants sur la Feuille X
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
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
Bonjour,
Avec le fichier ce sera plus simple
Avec le fichier ce sera plus simple
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é.
idem pour (VRAI + varB).
la colonne Commentaire de la feuille "données" n'aura aucun role, et ne sera pas copié.
Re,
Après l'ajout individu,
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
Après l'ajout individu,
'- ajouter l'individu d.Resize(1, nbC_Id).Value = c.EntireRow.Cells(1, "A").Resize(1, nbC_Id).Valueil 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
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...
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...
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".
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".
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
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
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
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
Cordialement
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?