Macro pour supprimer des colonnes sur d'autres feuilles
Bonjour à tous,
Je suis actuellement en pleine formation d'un nouveau fichier excel comportant plusieurs feuilles. J'aimerai créer une macro me permettant de supprimer certaines colonnes et en griser d'autres. Cependant ces colonnes se trouvent sur une autre feuille de calcul que celle ou se trouve ma macro et je n'ai pas envie de faire une macro pour chaque feuilles puisqu'il s'agit de colonnes presque similaires à supprimer/griser selon le cas.
J'ai déjà essayé avec la fonction Sheets(Array("feuil1","feuil2".....)) mais ceci ne marche pas dans mon cas. J'ai bien entendus essayé d'activer la feuille en question en premier mais la macro me renvois une erreur 1004 lors de la sélection de mes cellules à supprimer (Range("B10:B12").select).
Avez-vous des idées ?
Merci,
Manon.
Bonsoir
Merci de joindre un fichier exemple
Cordialement
Bonjour Dan,
Vous pourrez trouver ci-joint un fichier excel regroupant un modèle.
Le but étant de sélectionner l'échéance avec une X ou NA dans la feuil1. Je voudrais que pour les lignes ou il y a "NA", les colonnes de la feuille Tendance se supprime à l'aide d'une macro. A l'inverse, les lignes ou il y a "X" doivent rester. Ceci dans le but d'éviter les retours a zéro ou les discontinuités du graphique.
Par exemple, si 0=NA et 1=X dans la feuil1 il faut que la colonne 0 soit supprimer dans la feuille tendance et que la colonne 1 prenne sa place.
Merci d'avance du temps que vous me consacrez !
Manon.
Re
Votre fichier en retour avec un code à exécuter via le bouton placé sur la feuille 1
Si ok, et terminé, merci lors de votre réponse de cloturer le fil en cliquant sur la case à cocher verte à coté du bouton EDITER
Cordialement
Re bonjour Dan,
Merci beaucoup pour cette macro ! c'est déjà un bon début ! Cependant j'aimerai que lorsque les lignes de la feuil 1 sont en "X" elles apparaissent directement dans le fichier tendance.
Malheureusement, les "Ech" de la feuil1 ont autant de chance d'être placé en "X" et donc gardés ou en "NA" et donc supprimés.
Pensez-vous que ceci est possible ?? ou alors rajouter un bouton Annuler qui remettrai tout à zéro ?
Merci en tout cas du temps que vous prenez !
Cordialement,
Manon.
re
Un bouton annuler qui remettrait en place les colonnes supprimées ??
je n'ai pas compris votre commentaire et ce vous cherchez à faire là.
Cordialement
Bonjour Dan,
En fait lorsque les cellules (B2:B11) sont en "NA" la macro supprime bien les colonnes de la feuille tendance. En revanche j'aimerai que lorsque je change et que je met une cellule entre (B2:B11) en X cela me rajoute la colonne en question qui avait potentiellement été supprimé avant par la présence du NA. Ceci serait mon idéale.
Cependant comme je n'y arrive pas je suggérait alors de placer un bouton Annuler afin de remettre le tableau initial oui.
J'espère que mes explications sont claires..
Merci de votre aide !
Re Dan,
J'ai réussit avec ce code la :
Sub AjouterT0()
Dim i As Integer
With Sheets("Feuil1")
For i = 2 To 11
If .Range("B" & i) = "X" Then
With Worksheets("Tendance")
If .Cells(2, 2) <> 0 Then
.Cells(2, 2).EntireColumn.Insert
.Cells(2, 2).FormulaR1C1 = "0"
.Cells(3, 2).FormulaR1C1 = "4.5"
.Cells(4, 2).FormulaR1C1 = "=IF(Feuil1!R[13]C="""","""",Feuil1!R[13]C)"
.Cells(3, 2).Interior.Color = RGB(255, 255, 255)
.Cells(4, 2).Interior.Color = RGB(255, 255, 255)
End If
End With
End If
Next
End With
End Sub
Malheureusement, je suis obligé de faire un code pour chaque Ech (0,1,2,3,4,5,6,7,8,9). De plus, mon code ne s'exécute pas à l'aide du bouton que l'on a mit sur la feuille 1. Je pense qu'il ne prend pas en compte la condition " If .Range("B" & i) = "X" Then" mais qu'il se base que sur " If .Cells(2, 2) <> 0 Then".
Qu'en pensez-vous ? comment faire pour améliorer ce code ?
Au passage, que signifie " dcl = .Cells(2, .Columns.Count).End(xlToLeft).Column " dans votre code ? D'après ce que je comprend cette variable, dcl, va chercher la dernière colonne utilisée de la ligne 2 est-ce bien ca ? Je suis loin d'être une experte en code donc je ne comprend pas trop ce que ca signifie et en quoi cette variable est utile pour la macro. Pouvez-vous m'en dire plus svp
Merci d'avance !
Manon.
Re
Au passage, que signifie " dcl = .Cells(2, .Columns.Count).End(xlToLeft).Column " dans votre code ? D'après ce que je comprend cette variable, dcl, va chercher la dernière colonne utilisée de la ligne 2 est-ce bien ca ?
Exact.
Pour le souci de rajouter les colonnes supprimées, plutôt que de rajouter ce qui a été supprimé, on aurait pu partir d'une feuille Tendance modèle (donc vide de données) et créer une nouvelle feuille à partir de cette feuille modèle et adaptée en fonction des NA et X. Possible cela ou il y aura un souci lors l'utilisation ?
Cordialement
Bonjour Dan,
Veuillez excuser mon absence.
Dans votre ancien message vous me conseillez de réaliser une feuille modèle vide. Ceci sous entend que les X et les Na serait sélectionné sur cette feuille modèle et ceci créerai une nouvelle feuille adaptée en fonction des X et Na placés ?
Merci,
Manon.
RE
Dans votre ancien message vous me conseillez de réaliser une feuille modèle vide. Ceci sous entend que les X et les Na serait sélectionné sur cette feuille modèle et ceci créerai une nouvelle feuille adaptée en fonction des X et Na placés ?
Non je disais de faire une feuille Modèle hors de la feuille Tendance (appelons là Tendance_Mod). Lors de la l'exécution du code, on efface la feuille Tendance et on en crée une nouvelle à partir de la feuille Tendance_Mod
Regardez le fichier joint.
Cordialement
Bonjour Dan,
Je vous souhaite une bonne année 2017 avec pleins de réussite dans vos projets !
En ce qui concerne mon problème, votre macro supprime ma feuille de tendance sans la remettre comme sur votre exemple, je n'arrive pas a l'adapter à mon classeur..
Voici le code que j'avais écrit :
Dim i As Integer, j As Integer
With Sheets("Feuil1")
For i = 18 To 29
If .Range("H" & i) = "X" Then
With Worksheets("Tendance TE")
If .Cells(10, 3) <> Sheets("Feuil1").Cells(i, 6) Then
.Cells(10, 3).EntireColumn.Insert
.Cells(10, 3) = Sheets("Feuil1").Range("F" & i)
.Cells(42, 3) = Sheets("Feuil1").Range("F" & i)
.Cells(78, 3) = Sheets("Feuil1").Range("F" & i)
.Cells(11, 3).FormulaR1C1 = "4.5"
.Cells(43, 3).FormulaR1C1 = "4.5"
.Cells(79, 3).FormulaR1C1 = "4.5"
For j = 2 To 12
If Cells(10, j) = "6" Then
.Cells(12, j).FormulaR1C1 = "=IF(Feuil1!R57C31=0,#N/A,Feuil1!R57C31)"
.Cells(44, j).FormulaR1C1 = "=IF(Feuil1!R100C31=0,#N/A,Feuil1!R100C31)"
.Cells(80, j).FormulaR1C1 = "=IF(Feuil1!R143C37=0,#N/A,Feuil1!R143C37)"
End If
Sachant que j'ai dans ma feuille tendance 3 tableaux de résultats, un en ligne 10, un en ligne 42 et le dernier en ligne 78.
J'ai donc écrit cette partie " For j = 2 To 12
If Cells(10, j) = "6" Then
.Cells(12, j).FormulaR1C1 = "=IF(Feuil1!R57C31=0,#N/A,Feuil1!R57C31)"
.Cells(44, j).FormulaR1C1 = "=IF(Feuil1!R100C31=0,#N/A,Feuil1!R100C31)"
.Cells(80, j).FormulaR1C1 = "=IF(Feuil1!R143C37=0,#N/A,Feuil1!R143C37)"
End If" pour chaque valeur dans ma cellule 10,j c'est à dire que ce code est écrit pour chaque échéances, en changeant bien sur les formules des cases. En plus de tout ça, s'ajoute un code pour faire mes bordures et enfin un code pour trier mes valeur dans l'ordre croissant : col_deb = 2
col_fin = i
lig_deb = 10
lig_fin = 12
For ligne = lig_deb To lig_fin
Range(Cells(ligne, col_deb), Cells(ligne, col_fin)).Select
Selection.Sort Key1:=Cells(ligne, col_deb), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight
Next ligne
Qu'en pensez-vous ?
Je vais continuer aujourd'hui à essayer d'adapter votre code à mon classeur et je vous dirais si j'ai réussit bien entendus.
Cordialement,
Manon.
Re bonjour Dan,
J'ai finalement réussit à adapter votre code à mon classeur, il est le suivant :
Dim i As Integer, j As Integer, dcl As Integer
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Tendance pH").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Sheets("Tendance_Modele_2lim").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = "Tendance pH"
With Sheets("Feuil1")
For i = 18 To 29
If .Range("H" & i) = "NA" And .Range("H" & i) <> "" Then
With Worksheets("Tendance pH")
dcl = .Cells(10, .Columns.Count).End(xlToLeft).Column
For j = 2 To dcl
If .Cells(10, j) = Sheets("Feuil1").Range("F" & i) Then .Cells(10, j).EntireColumn.Delete: dcl = dcl - 1
Next j
End With
End If
Next
End With
Cependant j'ai encore quelques soucis, j'ai réalisé 2 macro différentes avec 2 feuilles tendances, car certaines tendances ne comportent qu'une limite et d'autre 2 limites. Bien entendus, ces limites diffèrent en fonction du paramètre étudié. J'ai donc rajouté dans le code des choses comme :
.Cells(11, j).FormulaR1C1 = "4.5"
ou encore des changements de titre sur le graphique. Cependant je n'arrive pas a lui dire qu'il faut prendre une formule spécifique à chaque case (formule faisant référence à un tableau d'une autre feuille du classeur) j'ai essayé avec .Cells(12, j).FormulaR1C1 = "=IF(Feuil1!R57C31=0,#N/A,Feuil1!R57C31)" mais il ne veut rien savoir.
Le problème est qu'il faudrait que mes formules s'adaptent en fonction des échéances présentes, si on a 0-3-6 il ne faut pas qu'il y ait la formule adapté à l'échéance 1 en case 3 par exemple. Me suivez-vous toujours ?
Pensez-vous qu'il est possible d'adapter le code précédent en rajoutant qqch pour adapter les formules aux échéances ou dois-je faire une feuille tendance modèle (contenant les formules qui seront copier) pour chaque tendance ?? (Je n'espère pas car j'ai beaucoup de paramètres à étudier )
Bien Cordialement,
Manon.
Bonjour,
Pourquoi ne pas avoir placé le bon fichier directement ??
Possible de voir ce fichier ?
Bonjour Dan,
Voici ci-joint un aperçu du fichier. C'est la dernière feuille crée qui me pose problème.
Bonne journée,
Manon.