Déterminer le rang de la colonne d'une variable.

LeRevenant

XLDnaute Occasionnel
Salut tout le monde,

Merci à l'avance pour votre aide, dans ce cas j'ai une macro qui marche, mais faut juste y intégrer une variable, par conséquent je n'ai pas jugé utile de donner un fichier, dites moi si jamais vous voulez un fichier, mais je pense vraiment pas que ça apporte quelque chose.

Voici le code d'une macro qui sert à supprimer toutes les lignes qui comportent un vide dans la colonne C:
__________________________________
Dim l As Integer
For l = Cells(9999, 3).End(xlUp).Row To 1 Step -1
If Cells(l, 3).Value = "" Then Cells(l, 3).EntireRow.Delete
Next l
__________________________________
Hors j'ai défini un nom à une cellule "PREMIERMAGASIN" et ce sont toutes les lignes vides qui sont sur la même colonne que la cellule "PREMIERMAGASIN" qui doivent partir.
Par conséquent serait il possible de changer tous les 3 que j'ai mis en gras par une formule du genre Colomuns("PREMIERMAGASIN")

Encore merci et bonne journée :)
 

Dranreb

XLDnaute Barbatruc
Re : Déterminer le rang de la colonne d'une variable.

Bonjour.

Profitez en pour le faire en une seule instruction au lieu de faire une boucle :
VB:
Range("PREMIERMAGASIN").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

J'ai supprimé ma macro pour mettre la tienne à la place, et ça me supprime toute la colonne... et après je perds même les noms que j'ai donné à mes cellules (ici "PREMIERMAGASIN")

Code:
Sub Macro8()
'
' Macro8 Macro
'

'
Range("PREMIERMAGASIN").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Merci, mais sais tu ce à quoi c'est dû? car je ne veux supprimer que les vides, les non-vides on garde.
 

Dranreb

XLDnaute Barbatruc
Re : Déterminer le rang de la colonne d'une variable.

Sans voir le fichier, non, je ne peux pas savoir à quoi c'est dû.
Essayer :
VB:
Application.Goto Range("PREMIERMAGASIN").SpecialCells(xlCellTypeBlanks)
Normalement ça doit selectionner toutes les cellules vides (et non celles valant un texte vide) de la plage nommée "PREMIERMAGASIN", qui est bien sur une seule colonne …?
 
Dernière édition:

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

Non malheureusement ça ne marche pas :/
Je te donne donc un fichier "exemple"

En jaune le résultat escompté.

Merci.
Si ça peut t'aider je te redonne la macro que j'avais faite à la base
Code:
Dim l As Integer
For l = Cells(9999, 3).End(xlUp).Row To 1 Step -1
If Cells(l, 3).Value = "" Then Cells(l, 3).EntireRow.Delete
Next l
 

Pièces jointes

  • SUPPRIMER.xlsm
    17.1 KB · Affichages: 15
  • SUPPRIMER.xlsm
    17.1 KB · Affichages: 16
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
Re : Déterminer le rang de la colonne d'une variable.

Le nom PREMIERMAGASIN ne couvre qu'une cellule au lieu de couvrir une colonne.
Rectifiez sa référence en =Feuil1!$F$1:$F$8 et alors ça marchera.
Mais pour le cas ou il n'y aurait pas ce cellule vide, pour que ça ne plante pas vous pouvez l'écrire comme ça :
VB:
Sub Macro8()
Dim CelVides As Range
On Error Resume Next
Set CelVides = Range("PREMIERMAGASIN").SpecialCells(xlCellTypeBlanks)
If Err Then Exit Sub
CelVides.EntireRow.Delete
End Sub
En relisant le post initial je vois que l'aviez dit, mais je n'avais pas compris.
Mais si vous laissez le nom comme ça, il sera fusillé si la cellule est vide, à supposer que vous fassiez :
Range("PREMIERMAGASIN").Resize(9000).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 
Dernière édition:

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

Salut,

Code:
Sub Macro8()
Dim CelVides As Range
On Error Resume Next
Set CelVides = Range("PREMIERMAGASIN").SpecialCells(xlCellTypeBlanks)
If Err Then Exit Sub
CelVides.EntireRow.Delete
End Sub

Macro testée et approuvée :p
Merci beaucoup!
(j'ai trouvé une manière pour donner à "PREMIERMAGASIN" une plage variable, donc c'est parfaitement ce que je voulais)
Bonne journée
 

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

Re salut,

Mauvaise nouvelle ...
Dans mon véritable classeur excel, la plage de cellule "PREMIER MAGASIN" (qui n'est rien d'autre qu'une colonne), qui ressemble à ça, contient des cellules considérées comme non-vides, et par conséquent la macro ne supprime aucune ligne
_______________
Ligne1 : MAGASIN A
Ligne2 : MAGASIN B
Ligne3 : MAGASIN C
Ligne4 :
Ligne5 : MAGASIN E
_______________

Je t'ai fait un p'tit classeur excel, où tu pourras voir le problème.
Le problème vient de ".SpecialCells(xlCellTypeBlanks)" qui veut dire "supprime si la cellule est vide", il faudrait la même chose pour dire "supprime si la cellule est nulle".

Encore merci.

À tôt bien (attention, demain je serai pas là car je passe des concours pour les écoles... mais bon ne t'en fais pas, je reviendrai, je suis pas le revenant pour rien MDR)
 

Pièces jointes

  • Nouveau Microsoft Excel Worksheet - Copie.xlsm
    14.8 KB · Affichages: 19

Dranreb

XLDnaute Barbatruc
Re : Déterminer le rang de la colonne d'une variable.

Bonsoir.

Bon alors comme ça :
VB:
Sub SupprimerLesVides()
Dim Lignes As Range
Set Lignes = LignesOùRelat(Range("PREMIERMAGASIN"), "A", "=", "")
If Not Lignes Is Nothing Then Lignes.Delete
End Sub

Rem. ——— FONCTIONS DE SERVICE

Function ColLignesOùRelat(ByVal CelDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Cellules partant de CelDéb dans sa colonne où la colonne ColQuoi est en relation Opé avec Valeur.
Set ColLignesOùRelat = Intersect(LignesOùRelat(CelDéb, ColQuoi, Opé, Valeur), CelDéb.EntireColumn)
End Function

Function LignesOùRelat(ByVal LigneDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Lignes entières partant de LigneDéb où la colonne ColQuoi est en relation Opé avec une Valeur.
If Not IsNumeric(ColQuoi) Then ColQuoi = LigneDéb.Worksheet.Columns(ColQuoi).Column
If VarType(Valeur) = vbString Then Valeur = """" & Replace(Valeur, _
   """", """""") & """" Else Valeur = Trim$(Str$(Valeur))
Set LignesOùRelat = LignesOùCondR1C1(LigneDéb, CondR1C1:="RC" & ColQuoi & Opé & Valeur)
End Function

Function ColLignesOùCondR1C1(ByVal CelDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Cellules partant de CélDéb dans sa colonne dont les lignes vérifient une condition R1C1 CondR1C1.
Set ColLignesOùCondR1C1 = Intersect(LignesOùCondR1C1(CelDéb, CondR1C1), CelDéb.EntireColumn)
End Function

Function LignesOùCondR1C1(ByVal LigneDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Lignes entières partant de LigneDéb qui vérifient une condition R1C1 CondR1C1.
Dim Lignes As Range, ColTrv As Range
With LigneDéb.Worksheet.UsedRange
   Set Lignes = LigneDéb.EntireRow.Resize(.Rows.Count + .Row - LigneDéb.Row)
   Set ColTrv = Intersect(.Columns(.Columns.Count + 1), Lignes): End With
ColTrv.FormulaR1C1 = "=1/(" & CondR1C1 & ")"
On Error Resume Next
Set LignesOùCondR1C1 = ColTrv.SpecialCells(xlCellTypeFormulas, 1).EntireRow
ColTrv.Delete xlShiftToLeft
End Function
 

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

Salut,

Alors j'ai testé ta macro sur le fichier exemple que j'ai donné, elle marche très bien. Mais par contre sur le vrai fichier, elle supprime tout ... Je comprends vraiment pas.

Merci.
 

Dranreb

XLDnaute Barbatruc
Re : Déterminer le rang de la colonne d'une variable.

Peut être auriez vous intérêt à préciser la 1ère ligne
Set Lignes = LignesOùRelat(Rows(2), "C", "=", "")
ou plutôt :
Set Lignes = LignesOùRelat(Range("PREMIERMAGASIN"), Range("PREMIERMAGASIN").Column, "=", "")
 
Dernière édition:

LeRevenant

XLDnaute Occasionnel
Re : Déterminer le rang de la colonne d'une variable.

Peut être auriez vous intérêt à préciser la 1ère ligne
En effet, j'ai remplacé
Set Lignes = LignesOùRelat(Range("PREMIERMAGASIN"), "A", "=", "")
par
Set Lignes = LignesOùRelat(Rows(2), "C", "=", "")
et ça marche très bien :)

Donc pour les gens que ce topic intéresse, il faut prendre ce code si vous souhaitez supprimez les lignes où il y a vides sur une colonne donnée MAIS qui ne sont pas considérés comme vide:
Code:
Sub SupprimerLesVides()
Dim Lignes As Range
Set Lignes = LignesOùRelat(Rows(2), "C", "=", "")
If Not Lignes Is Nothing Then Lignes.Delete
End Sub

Rem. ——— FONCTIONS DE SERVICE

Function ColLignesOùRelat(ByVal CelDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Cellules partant de CelDéb dans sa colonne où la colonne ColQuoi est en relation Opé avec Valeur.
Set ColLignesOùRelat = Intersect(LignesOùRelat(CelDéb, ColQuoi, Opé, Valeur), CelDéb.EntireColumn)
End Function

Function LignesOùRelat(ByVal LigneDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Lignes entières partant de LigneDéb où la colonne ColQuoi est en relation Opé avec une Valeur.
If Not IsNumeric(ColQuoi) Then ColQuoi = LigneDéb.Worksheet.Columns(ColQuoi).Column
If VarType(Valeur) = vbString Then Valeur = """" & Replace(Valeur, _
   """", """""") & """" Else Valeur = Trim$(Str$(Valeur))
Set LignesOùRelat = LignesOùCondR1C1(LigneDéb, CondR1C1:="RC" & ColQuoi & Opé & Valeur)
End Function

Function ColLignesOùCondR1C1(ByVal CelDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Cellules partant de CélDéb dans sa colonne dont les lignes vérifient une condition R1C1 CondR1C1.
Set ColLignesOùCondR1C1 = Intersect(LignesOùCondR1C1(CelDéb, CondR1C1), CelDéb.EntireColumn)
End Function

Function LignesOùCondR1C1(ByVal LigneDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Lignes entières partant de LigneDéb qui vérifient une condition R1C1 CondR1C1.
Dim Lignes As Range, ColTrv As Range
With LigneDéb.Worksheet.UsedRange
   Set Lignes = LigneDéb.EntireRow.Resize(.Rows.Count + .Row - LigneDéb.Row)
   Set ColTrv = Intersect(.Columns(.Columns.Count + 1), Lignes): End With
ColTrv.FormulaR1C1 = "=1/(" & CondR1C1 & ")"
On Error Resume Next
Set LignesOùCondR1C1 = ColTrv.SpecialCells(xlCellTypeFormulas, 1).EntireRow
ColTrv.Delete xlShiftToLeft
End Function

Un grand merci!
Bonne aprème :)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal