Excel : Incrémentation cellules cachées

Résolu
Bonjour,

Je me creuse la tête sur Excel.
Voilà mon problème :
J'ai créé un fichier Excel ou je filtre certaines lignes et je voudrais pouvoir entrer un nombre que je puisse incrémenter que sur les cellules visibles.
Est ce possible, car je n'arrive pas à trouver de solution et je suis obligée de faire l'incrémentation manuellement ce qui est très long (rire)

Merci de votre aide!!!
Configuration: Windows XP
Excel 2003

5 réponses

  1. Contributeur
    bonjour

    On vois bien que tu t'ai creusé la tête, sur ton problème devant ton tableau en manipulant.

    J'ai balancé le marc de café de midi à la poubelle et je n'ai plus rien pour faire de la divination :
    - c'est quoi ton incrémentation ?
    - en fonction de quoi tu modifies ?

    Comme on n'as pas ton tableau devant les yeux on ne peut rien pour toi si tu ne précise pas demande...
    1
    1. Bonjour,

      Je vous remercie de toutes vos réponses si rapides.
      Je vais essayer d'être plus précise.
      En faite il s'agit d'un fichier excel qui me sert de base de donnée pour ma facturation en publipostage Word.

      En colonne C je rentre une période de facturation : M pour mensuel, T pour trimestriel, S pour semestriel, A pour annuel

      Suivant le mois je filtre, par exemple pour ce mois ci je veux facturer mes clients mensuel et trimestriel.
      Donc je filtre la colonne C et en colonne D je voudrais pouvoir rentrer un numéro de facture de départ dans une cellule, par exemple 806207 et que les cellules visibles suit au tri s'incrémentent de +1 à chaque ligne.

      Merci d'avance...
      0
    2. Contributeur
      @elyhabonjour

      Voilà qui est effectivement plus clair mais comme tu devrais avoir déjà ta réponse, bon courage pour la mise en œuvre.
      0
  2. Contributeur
    Bonsoir,

    Allez, je tente... ;-)
    Fonction personnalisée à copier dans un module :
    Function NbCellVisible(plage As Range) As Double
        Application.Volatile
        Dim c As Range, t As Double, ar As Range
        For Each ar In plage.Areas
            For Each c In ar
                If c.EntireRow.Hidden = False And c.EntireColumn.Hidden = False Then
                    t = t + 1
                End If
            Next c
        Next ar
        EL_NbCellVisible = t
    End Function

    Pour incrément en colonne C en démarrant le compte à la ligne 2 saisir en C2 :
    =NbCellVisible($C$2:C2)
    et étirer vers le bas.
    Supprimer tous les filtres avant la recopie pour éviter les résultats bizarres si la formule n'est pas sur toutes les lignes.
    Fonction dynamique, copier-collage spécial valeur pour fixer le résultat si besoin

    eric
    0
    1. Contributeur
      Bonjour tous,
      Un peu compliqué... mais seule solution que j'ai trouvé, si quelqu'un peu simplifié !!
      'Ne doit pas être une sélection manuelle et doit être
      'activée directement après le filtrage.
      Sub NumeroteLigneVisible()
      Dim CelR As Range
      Dim TB, i As Long, DerLig As Long, P as Long
          Sheets("feuil2").Select
          Set CelR = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
          CelR.Select
          a = CelR.Address
          TB = Split(a, ":"): DerLig = Range(TB(UBound(TB))).Row
          'Numérote la colonne H (8)
          P = 1
          For i = 1 To DerLig
              If CelR.Rows(i).Hidden = False Then
                  Cells(i, 8) = P
                  P = P + 1
              End If
          Next i
      End Sub

      A+
      0
      1. Contributeur
        La simplification était trop... simple...
        Sub NumeroteLigneVisible()
        Dim  i As Long, DerLig As Long, P As Long
            Sheets("feuil2").Select
            DerLig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
            'Numérote la colonne H (8)
            P = 1
            For i = 1 To DerLig
                If CelR.Rows(i).Hidden = False Then
                    Cells(i, 8) = P
                    P = P + 1
                End If
            Next i
        End Sub

        0
        1. Contributeur
          --
          La vérité ne se possède pas, elle se cherche seulement
          0
      2. Contributeur
        Bonsoir,

        Comme quoi plus on est précis dans sa demande et plus on a qcq chose d'adapté...
        Tu copies cette macro dans le code de la feuille ou dans un module.
        Tu appliques tes filtres, tu sélectionnes la plage à numéroter et tu appelles la macro.
        Sub NumFacture()
            ' sélectionner la plage à numéroter avant d'appeler la macro
            Dim c As Range, num As Long
            num = CLng(InputBox("Premier numéro de facture ?", "Numérotation automatique de la plage sélectionnée"))
            For Each c In Selection
                If c.EntireRow.Hidden = False Then
                    c.Value = num
                    num = num + 1
                End If
            Next c
        End Sub


        Ceci dit tu pouvais le faire en modifiant la formule que je t'ai donnée en y ajoutant le n° de ta 1ère facture-1.
        NbCellVisible($C$2:C2)+999 pour commencer la numérotation à 1000.
        Ou bien en modifiant légèrement le code fournit par lermitte
        eric
        0
        1. Merci beaucoup de ton aide efficace et rapide ça fonctionne à merveille!!!

          Elyha
          0
        2. Merci pour cette macro :)
          0