VBA-Excel07:Suppression de colonnes après sélection d'une valeur [Résolu/Fermé]

Signaler
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015
-
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015
-
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

Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Supeeeeeer...merci beaucoup Patrice, c'est exactement ce que je cherchais.. bonne journée :)
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
De rien, au plaisir de te relire sur le Forum

Cordialement
Patrice
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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?
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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 :)
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
Bonjour,

Voici le fichier en retour :
https://www.cjoint.com/c/DHutEpt3NNC
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Aucune aide sur ce sujet? S'iiiil vouuus plaaaaait HELP :( :(
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
Supprimées ou effacées ???
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Supprimées carrément :)
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Donc pas possible? Pas moyen de le faire implicitement, faire appel à la suppression des colonnes directement après la création des feuilles?
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
Il n'y a pas besoin de faire appel, il s'agit d'une procédure évènementielle qui s'exécute automatiquement à chaque modification de la feuille X, que cette modification soit manuelle ou effectuée par ta macro, la seule condition est le respecter la chronologie des événement, c'est c-à-dire que ta macro d'ajout doit :
- ajouter la nouvelle feuille (et éventuellement définir son nom),
- ajoute son nom en début de ligne sur la Feuille X
puis
- mettre à jour les YES et NO (manuellement ou à la fin de la macro)

Mets tu fichier sur : https://www.cjoint.com/
puis mets le lien dans ton prochain post

Cordialement
Patrice
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Merci de me consacrer de ton temps :) . j'ai mis un extrait de mon fichier sur ce lien: https://www.cjoint.com/?3HbroIUcDmy
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
Bonjour,

Avec le fichier ce sera plus simple
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Oui le voilà sous: http://www.cjoint.com/data/0HnmJK0aGIr.htm
Merci
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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 ?
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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é.
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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".
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Salut,
J'ai déposé le fichier avec toute explication sous http://cjoint.com/data/0Htps1K7alB.htm
Merci beaucoup :)
Messages postés
8456
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
3 mars 2021
1 616
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Re, voici mes réponses:
-Dans la feuille "Donnees" seul le champ "Nom" de la colonne "A" est à copier dans aaa1, eee2...etc
-Les feuilles varA et varB seront déjà rempli manuellement, nous n'auront qu'à en copier les données de la plage E:P et les coller dans les feuilles générées aaa1, eee2...etc dans les lignes correspondantes à chaque "Nom". (juste une précision comme indiqué dans les feuilles, c'est que les valeurs qu'il faut comparer dans Donnees sont en Maj+espace alors que sur varA et varB il sont en Min+'_')

Pour les champs vides, ils seront remplies manuellement, donc on a pas à les toucher.

-Les champs à copier de "Donnees" => "Nom"
-Les champs à copier de "varA" et "varB" => tous ceux de la plage "E:P"

-En fait les intitulés de champs de varA et varB sont les mêmes que dans Feuille_exemple voire les feuilles aaa1, eee2 qui seront générées. Depuis varA et varB, nous aurons seulement besoin des données de la plage "E:P" dépendemment de la valeur "Nom" qu'on devra comparer à celle de la feuille "Donnees".

-Comme j'ai mis dans l'exemple pour le "Nom" = Siml Trad, cette valeur existe 2 fois dans Donnees, mais chacune appartient à une des feuilles varA ou varB, donc selon ce qui a été définit dans "Source" + VRAI = la macro devra récupérer les données "E:P" equivalentes.

Une fois le résultat obtenu, le client sera content moi je serai contente et toi aussi :-D .. J'espere apprendre mieux le VBA pour ne plus avoir à te déranger ;-)
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

Merci beaucoup Patrice, oyyy c'est PARFAIT, correcte et exactement ce que je cherchais. merci enormément :) :):)