Colonnes variables_Trouver la valeur de la deuxième ligne dans la même colonne

Pierre Aebischer

XLDnaute Nouveau
Bonjour le forum,
J'ai cherché quelques peut mais je n'ai pas trouvé de solution pour mon problème
Objectif: Je souhaite faire les totaux au bas d'une liste dont le nombre de colonnes est variable
Je fais une boucle qui s'achève lorsque la validation que je souhaite effectuer à chaque pas correspond à mon critère (à savoir la cellule est vide).
Sur le fichier joint et son code, il sera peut être plus facile de comprendre.
Pour le calcul que je souhaite effectuer j'avance chaque fois (Selection.Offset(0, 1).Select) et je souhaite savoir si la valeur de la cellule de la même colonne sur la ligne 2 est différente de "" ou non
Pouvez-vous me donner un coup de main? Un grand merci par avance
 

Pièces jointes

  • 15 05 05_Demande à Download excel.xlsm
    18.2 KB · Affichages: 18

Dranreb

XLDnaute Barbatruc
Re : Colonnes variables_Trouver la valeur de la deuxième ligne dans la même colonne

Bonjour.

Ceci ne conviendrait-il pas ?
VB:
Sub Timing_journallier()
Dim LFin&, CFin&
LFin = [A60000].End(xlUp).Row
CFin = [IV3].End(xlToLeft).Column
Cells(LFin + 2, 2).Resize(, CFin - 1).FormulaR1C1 = "=SUM(R3C:R" & LFin & "C)"
End Sub
 

Pierre Aebischer

XLDnaute Nouveau
Re : Colonnes variables_Trouver la valeur de la deuxième ligne dans la même colonne

...:rolleyes:Si j'osais encore me permettre. Mon fichier fonctionne très bien et j'ai mis une formule en ligne 1 qui me dit que si la somme des colonnes est différente de 0, je laisse vide ("") sinon je mets 1
L'opération consiste à supprimer toutes les colonnes dont l'entête (ligne1) = 1. ça fonctionne avec 2 méthodes mais c'est très lent car on y va colonne par colonne
Y a-t-il un moyen de sélectionner toutes les colonnes dont la cellule en première ligne correspond à 1...pour pouvoir ensuite les supprimer en goupe. Je cherche depuis une heure mais ne trouve rien d'utilisable
 

Dranreb

XLDnaute Barbatruc
Re : Colonnes variables_Trouver la valeur de la deuxième ligne dans la même colonne

C'est possible si 1 est la seule information numérique pouvant exister dans les entêtes de colonnes dont certaines sont à supprimer. Si les autre contiennent autre chose, du texte, une valeur d'erreur ou vides, ça va on peut utiliser la méthode SpecialCells pour extraire d'une plage toutes les cellules contenant une constante numérique. Sinon il faut installer dans une autre ligne une formule temporaire du genre =1/(R1C=1) qui renvoie 1 si la ligne 1 contient 1 et #DIV/0! dans le cas contraire de façon à pouvoir en extraire toutes les cellules contenant une formule, cette fois, rendant une valeur numérique, celles renvoyant la valeur d'erreur en étant donc écartées.
J'ai des fonctions qui font ça automatiquement pour des lignes à extraire selon une condition, mais pas pour des colonnes. Je vous les livre quand même pour que vous voyez les syntaxes :
VB:
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
Grâce à ces fonctions cette instruction supprimerait toute les ligne entières à partir de la 2 ou la colonne A porte la valeur 1 :
VB:
LignesOùRelat(Rows(2), "A", "=", 1).Delete

Edit: Mais je vient de relire la demande: c'est déja une formule qui renvoie le Double 1 ou le Sring "" ?
Peut être suffit-il de faire :
VB:
Rows(1).SpecialCells(xlCellTypeFormulas, 1).EntireColumn.Delete
Mais faites peut être un d'abord un essai en mettant Select au lieu de Delete, on ne sait jamais…
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 087
Membres
103 461
dernier inscrit
dams94