MFC macro si ajout de colonne utilisation de variables possible ?
Bonjour,
J'ai créé un Excel avec des MFC sous macro mais je me suis rendu compte que si j'ajoute des colonnes enfaite ma macro ne fonctionnera plus. J'ai essayé de créé des variables et je me demande si il est pas possible de les utiliser dans la macro en cas d'ajout de colonne ou avez vous une autre idée de comment puis je faire pour que si une colonne est ajouté la macro se mette à jour automatiquement ?
Je ne sais pas si j'arrive à bien me faire comprendre ?
Bonjour Xenio19
J'ai modifié votre titre ainsi que le libellé dans votre demande
ce ne sont pas des MEC
Concernant votre demande,
en général il suffit de nommer des plages pour pourvoir utiliser ce nom et appliquer ce que l'on veut dessus
A+
Ah oui effectivement merci pour le changement d'abréviation
Concernant votre réponse à ma question je n'ai pas bien compris comment je peux réaliser ceci.
Re,
Comme nous ne savons pas de quel code vous parlez et de quelles colonnes
Il va être compliqué de vous aider, je pense.
A+
Re,
Je parle du code complet pour le bouton "Mise en forme conditionnelle". Actuellement dans mon code on peut voir que a chaque fois j'ai fais une selection de colonne par exemple pour :
"'-----------------------------------------------------------------------------------
'annulé
Columns("A:PL").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= $AF1 <> """""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Strikethrough = True
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False "
---------------------------------------------------------------------------------------------------
J'ai sélectionné les colonnes de A à PL mais admettons quelqu'un décide d'ajouter une colonne dans la feuille Excel alors mon code ne sera plus bon je voudrais savoir si il est possible de créer quelque chose comme une variable (feuille 2 de mon excel) qui permettrai de mettre automatiquement a jour tout le code si une colonne est ajouté ou supprimé.
Re,
Ok avec l'explication, je comprends
Voici le début du code qu'il faut utiliser
' Appliquer la MFC sur toutes les colonnes
Dim dCol As Long, dLig As Long
' Trouver le numéro de la dernière colonne remplie en ligne 2
dCol = Cells(2, Columns.Count).End(xlToLeft).Column
' Trouver le numéro de la dernière ligne du tS
dLig = Range("A" & Rows.Count).End(xlUp).Row
' Appliquer la MFC de la cellule A3 à XX
With Range(Cells(3, 1), Cells(dLig, dCol))
' Comme on commence à la ligne 3, il faut tester AF3
.FormatConditions.Add Type:=xlExpression, Formula1:="= $AF3 <> """""
.FormatConditions(.FormatConditions.Count).SetFirstPriority
With .FormatConditions(1).Font
.Strikethrough = True
.TintAndShade = 0
End With
.FormatConditions(1).StopIfTrue = False
End WithJ'espère que ce sera assez clair
A+
Re,
Merci, c'est clair pour l'exemple que j'ai donné mais si par exemple je prend la suite de mon code comme ceci:
'-----------------------------------------------------------------------------------
Columns("AS:PL").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(AS1))>0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
'Criticité si vide et annulé
Columns("AS:PL").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= ET( $AF1 <> """"; AS1 <> """")"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.14996795556505
End With
Selection.FormatConditions(1).StopIfTrue = False
'--------------------------------------------------------------------------------Edit modo : merci de mettre le code entre balises SVP avec le bouton </>
Donc ici je choisi les colonnes de AS à PL mais c'est pareil si on m'ajoute une colonne dans l'excel avant ou dans l'entre 2 alors ce ne sera plus de AS à PL ... Il n'existe pas un moyen pour que malgré l'ajout ou la suppression de colonne le choix d'intervalle reste le même ?
C'est assez complexe ce que je demande je le conçoit ...
Je ne pourrai pas utiliser quelque chose de ce type :
"Dim dCol As Long, dLig As Long
' Trouver le numéro de la dernière ligne du tS
dLig = Range("A" & Rows.Count).End(xlUp).Row
With Range(Cells(3, NumColScenario), Cells(dLig, NumColFin))"Edit modo : merci de mettre le code entre balises SVP avec le bouton </>
en utilisant les variables de ma feuille 2 ?
Pas de soucis je le ferrai à l'avenir je ne savais pas ...
Bonjour,bonjour
Besoin d'une petite précision pour aider. Travaillez vous avec un tableau structuré ou non??
edit:
J'ai ouvert le fichier joint en rajoutant ceci pour la criticité a devrait fonctionner
prem_col = Range("DetailsChantier[14/12/2023]").Column
ligne = Range("DetailsChantier[14/12/2023]").Row
der_col = Range("DetailsChantier[31/12/2024]").Column
Range(Cells(ligne, prem_col), Cells(ligne, dercol)).EntireColumn.Selectet en supprimant le columns("AS:PL").select
Bonjour,
oui je travaille sur un tableau structuré et ce que vous proposez peut fonctionner mais si les dates sont modifiées cela ne fonctionnera plus ?
RE,
Il faudrait que mes formules se trouvant dans la feuille variable par exemple :
'= EQUIV(50; 'Détails chantiers'!$1:$1; 0) je puisse l'écrire en VBA. J'ai essayé ceci x=Application.Match(50; 'Détails chantiers'!$1:$1,0) mais ca ne fonctionne pas ..;
Une fois que j'aurai créer mes variables dans la macro je pourrai les utilisé en tant que numéro de colonne et de ligne ?
Probléme résolu merci à vous de m'avoir aidé :)
Pour ceux que ça intéresse j'ai d'abord crée toutes mes variables dans la macro et ensuite je l'ai toute remplacé dans ma macro.
Private Sub CommandButton1_Click()
'-----------------------------------------------------------------------------------
'Variables
'N° Colonne où commence le calendrier :
NumColDebutCalendrier = Application.Match(50, Rows("1:1"), 0)
'N° colonne fin du calendrier
NumColFinCalendrier = Application.Match("31/12/2025", Rows("2:2"), 0)
' Trouver le numéro de la dernière ligne du tS
dLig = Range("A" & Rows.Count).End(xlUp).Row
'-----------------------------------------------------------------------------------
'annulé
' Appliquer la MFC des colonnes A3 à PJ
Range(Cells(3, 1), Cells(dLig, NumColFinCalendrier)).EntireColumn.Select
'Columns("A:PJ").Select
'Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= $Range(Cells(3, NumColAnnule)) <> """""
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= $AF1 <> """""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Strikethrough = True
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = FalseLe problème qu'il me reste maintenant c'est la modification dans mes formules de MFC. Par exemple dans cette formule :
" Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= $AF1 <> """"" "
J'ai essayé d'écrire :
"Selection.FormatConditions.Add Type:=xlExpression, Formula1:="= $Cells(1, NumColAnnule) <> """"" "
Mais ça ne fonctionne pas comme ça apparemment avez vous une idée ?
Re,
La solution trouvée est quasiment celle que je vous avais donné ici
https://forum.excel-pratique.com/s/goto/1125365
Il suffit de reprendre ce que je vous avait donné et expliqué !?
A+
Alors oui votre solution marche très bien pour la première partie du code mais pour les autres parties j'avais besoin de créer plusieurs variables.
Un autre exemple que celui que j'ai mis tout à l'heure avec une autre variable:
'N° de colonne "2"
NumCol2 = Application.Match("2", Rows("2:2"), 0)
'------------------------------------------------------------------------------------
'couleur
Range(Cells(dLig, NumCol2), Cells(dLig, NumCol2)).EntireColumn.Select
'Columns("AG:AG").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(AG1))>0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = FalseMalgré ça cela ne résous tout de même pas mon problème dans les formules car si une colonne et ajouté ou supprimé par exemple la formule ici :
Formula1:="=NBCAR(SUPPRESPACE(AG1))>0"n'est plus valable
Re,
Je vous l'ai expliqué me semble t'il
Si vous inscrivez la MFC à partir de la ligne 3 il faut que la ligne soit la même dans la formule
AG1 devient AG3, AF1 devient AF3, etc..
Ce qui fera que votre MFC se propagera correctement aux autres lignes
A+
Je pense que je me fais mal comprendre ... :(
Mn problème n'est pas le N° de ligne mais le nom de la colonne car si on ajoute ou supprime une colonne ça ne sera plus du AF ou AG ou autres qu'il faut dans la formule ... Pour ça que je demande si je pouvais remplacé par exemple "AF" par "Cells(1, NumColAnnule)"
