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 Et donc, ça descend après à l'infini..

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.

3registre.zip (15.59 Ko)

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

Rechercher des sujets similaires à "deplacer prochaine valeur numerique"