Se déplacer vers la prochaine valeur numérique
Bonjour à tous,
Je bloque actuellement sur un petit problème (mon niveau est plutôt faible...). J'essaie de déplacer ma cellule dans la colonne G vers la prochaine cellule qui contient une valeur numérique.
Cela fonctionne pas trop mal avec ce code :
Sub CellSuivante()
Suite:
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Or IsNumeric(ActiveCell.Value) = False Then GoTo Suite Else: GoTo Suite2
Suite2:
ActiveCell.Select
End Sub
Mais malheureusement, lors de la descente dans la colonne G, je suis amené à croiser le chemin de cellules fusionnées de D à I et le "ActiveCell.Offset(1, 0).Select" renvoie automatiquement ma cellule en colonne D
Y a t'il un moyen pour que je puisse me déplacer directement vers la prochaine valeur numérique en contournant les cellules fusionnées ?
Sinon, il y aurait la solution de défusionner toutes les cellules souhaitées et j'avais commencé à utiliser ce code :
Sub Macro2()
Dim SelRange As Range
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
For Each cell In Range("C" & 1 & ":C" & DernLigne)
If cell.Value = "Nom de la localisation :" Then cell.Offset(0, 1).Select
Set SelRange = Selection
SelRange.UnMerge
Selection.WrapText = False
Next cell
End Sub
Malheureusement, autant pour exécuter le code pour 2-3 lignes, ça va, mais parfois des tableaux contiennent beaucoup de ces lignes fusionnées et ça fige pas mal le PC.
Merci de votre aide !
Je joins l'exemple du tableau en question.
Bonjour,
éviter les .select si tu ne veux pas ralentir inutilement tes macros.
Très peu sont vraiment obligatoires.
Evite aussi les goto qui donnent un code spghetti difficile à suivre et à maintenir. Toutes les structures existantes te le permette dans la majorité des cas. Goto n'est plus utilisé que pour les gestions d'erreur.
Ensuite plutôt que de balayer toutes les cellules tu peux sélectionner celles qui t'intéressent (saisies numériques) et ne balayer que celles-ci.
Sub suivant()
Dim pl As Range, c As Range
On Error Resume Next
Set pl = Columns("G").SpecialCells(xlCellTypeConstants, xlNumbers)
On Error GoTo 0
If Not pl Is Nothing Then
For Each c In pl
If c.Address = c.MergeArea(1).Address Then MsgBox c.Address & " = " & c.Value
Next c
End If
End Sub
Si tes cellules intéressantes ne sont jamais fusionnées tu peux supprimer If c.Address = c.MergeArea(1).Address
eric
Merci pour ton aide eriiic.
Je vois que ton code liste bien les cellules numériques dans la colonne en question, cependant, ce que j'ai vraiment besoin, c'est un déplacement.
Par exemple, si je suis dans la cellule contenant le 5, je souhaite qu'en activant la macro, je sois directement déplacé vers la cellule contenant le "4". Puis en réactivant la macro, dans la cellule contenant le "2".
Penses tu cela possible ?
Merci encore
Tu peux faire comme ça :
Sub suivant()
Dim pl As Range, c As Range, c1 As Range
On Error Resume Next
Set pl = Columns("G").SpecialCells(xlCellTypeConstants, xlNumbers)
On Error GoTo 0
If Not pl Is Nothing Then
Set c1 = pl(1)
Set pl = Intersect(pl, Rows(ActiveCell.Row + 1 & ":" & Rows.Count))
If pl Is Nothing Then c1.Select Else pl(1).Select
End If
End Sub
J'ai ajouté que si tu es à la dernière ça repart à la 1ère, à voir si tu veux le conserver.
Tu n'es pas obligé d'être dans la colonne. La recherche commence sous la ligne active (non incluse, sinon tu resterais toujours dessus)
Super eriiic, c'est exactement ça !
Merci encore