IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Traitement sur chaque cellule d'une colonne d'un range filtré [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut Traitement sur chaque cellule d'une colonne d'un range filtré
    Bonjour à tous,

    J'ai un petit souci en essayant de traiter les cellules de la colonne H d'un range filtré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .Range("A1:AL" & LastRowBeforeFilter).AutoFilter Field:=8, Criteria1:=""
            Set r = .Range("A1:AL" & LastRowBeforeFilter).Offset(1, 0).SpecialCells(xlCellTypeVisible)
            'r.EntireRow.Delete
     
            'r.Columns(8).Value = "9999999"
    A la base, on supprimait les lignes qui étaient vides en colonne H.
    Maintenant, je voudrais écrire dans chaque cellule une valeur (différente pour chaque cellule).

    Comment parcourir ces lignes filtrées et écrire quelque chose en colonne H ?
    r.Columns(8).Value = "9999999" écrit bien en colonne H dans les lignes filtrées mais j'aimerais avoir des valeurs différentes et en plus, cela écrit une ligne de trop.
    Il faut certainement jouer avec un offset.


    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    commencer à l'index 2 la boucle sur la colonne désirée des cellules visibles

    Pour le reste on attendra une explication technique claire & exhaustive.

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    Merci pour cette première réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .Range("A1:AL" & LastRowBeforeFilter).AutoFilter Field:=8, Criteria1:=""
    LastRowBeforeFilter = .Range("A" & .Rows.Count).End(xlUp).Row
    Set r = .Range("H1:H" & LastRowBeforeFilter).Offset(1, 0).SpecialCells(xlCellTypeVisible)
    'Set r = .Range("A1:AL" & LastRowBeforeFilter).Offset(1, 0).SpecialCells(xlCellTypeVisible)
    'r.EntireRow.Delete
    For Each Cell In r
      Cell.Value = "9999999" & Cell.Row
    Next
    J'ai modifié mon code pour parcourir uniquement la colonne H suite au filtre automatique.
    Par contre, j'ai toujours une valeur écrite de trop.
    Je commence pourtant à la ligne 2 avec ce code : Set r = .Range("H1:H" & LastRowBeforeFilter).Offset(1, 0).SpecialCells(xlCellTypeVisible) non ?

    Pour "l'explication technique claire et exhaustive", je veux simplement écrire dans chaque cellule de la colonne H restante après le filtre une valeur unique.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Miistik Voir le message
    Set r = .Range("H1:H" & LastRowBeforeFilter).Offset(1, 0).SpecialCells(xlCellTypeVisible)

    Ou plus simplement .Range("H2:H" & LastRowBeforeFilter).SpecialCells(xlCellTypeVisible).Value = "valeur unique"

    Ou encore sans filtre via une simple formule de calculs adaptée en VBA, à la portée de tout débutant …

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu décales d'une ligne vers le bas sans retailler la plage. Forcément ça fait une ligne de plus.
    eric

    edit : je viens de revoir la réponse de Marc-L qui l'expliquait déjà, désolé

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    J'ai résolu mon problème via le range de Marc-L modifié.

    Voici mon code si cela peut en aider d'autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .Range("A1:AL" & LastRowBeforeFilter).AutoFilter Field:=8, Criteria1:=""
     
    Set r = .Range("H2:H" & LastRowBeforeFilter).SpecialCells(xlCellTypeVisible)
    i = 0
    For Each Cell In r
        Cell.Value = "99999999" & i
        i = i + 1
    Next

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forumule left sur chaque ligne d'une colonne
    Par gdpasmini dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/09/2014, 14h25
  2. [LibreOffice][Tableur] Copie de la valeur de chaque cellule d'une colonne
    Par jeromeperso dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 21/03/2013, 10h14
  3. Réponses: 0
    Dernier message: 06/06/2011, 13h31
  4. Couleur pour chaque cellule d'une colonne
    Par lo_schil dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2010, 11h48
  5. [XL-2007] formule sur les cellules d'une colonne
    Par yanistelo dans le forum Excel
    Réponses: 6
    Dernier message: 28/05/2009, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo