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 :

Selection plage de données VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut Selection plage de données VBA
    Bonjour,
    l'idée de ma macro serait de repertorier les matricules identiques ou non dans une de mes feuilles. Pour cela je supprime tout d'abord les lignes sans matricule présente dans mon fichier puis je fais un countIf (vba =NB.SI en excel) pour rechercher quel matricule se trouve dans la feuille précédente. Merci par avance pour votre aide!
    Pb : Je voudrais selectionner une plage de cellule sur ma feuille Log16 ( CountIf(F1.Range("D", Range("D").End(xlDown)), Range("D" & J))) mais j'ai une erreur de syntaxe dans mon code pouvez vous m'aider s'il vous plait?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    Dim NbLg As Long
    Colonnes = Array("D")
     
     
      Set F1 = Sheets("Log16")
      Set F2 = Sheets("Log17")
     
    With F1
        Range("D:D").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
     
    With F2
        Range("D:D").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
        NbLg = .Range("A" & Rows.Count).End(xlUp).Row
     
        For J = 2 To NbLg
            F2.Range("F2").FormulaR1C1 = "= CountIf(F1.Range("D", Range("D").End(xlDown)), Range("D" & J))"
        Next J
    End With
    Cordialement,
    Jérémy

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu as deux problèmes :

    - tu utilises la propriété FormulaR1C1 mais tu passes des Ranges au lieu de [R] et de [C]
    - quand tu veux passer des guillemets dans une chaine de caractère, tu dois doubler le guillemets pour que VBA comprenne que ça fait partie de ta chaine

    si tu n'as pas besoin de conserver la formule de tes CountIf, et que le résultat uniquement suffit, tu peux utiliser ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    F2.Range("F2") = Application.WorksheetFunction.CountIf(F1.Range("D", Range("D").End(xlDown)), Range("D" & J))
    par contre, tu vas écrire ton résultat à chaque fois dans ta cellule F2 ... et donc écraser le résultat précédent à chaque tour de boucle, là aussi c'est un problème.

    je ne donne pas la solution toute faite, je te laisse un peu chercher et proposer une piste ok ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu travaille sur deux feuilles il est donc très important de rattacher chaque Range à sa "parente" comme tu le fais pour certains. En partant de la ligne de code de Joe, ça devrait donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    F2.Range("F2") = Application.WorksheetFunction.CountIf(F1.Range("D", F1.Range("D").End(xlDown)), F1.Range("D" & J))
    sinon, ça sera la feuille active qui sera prise en considération par le compilateur.

    Hervé.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Encore +1

    je suis vraiment pas concentré aujourd'hui ....

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Le lundi c'est souvent ça

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/08/2014, 12h28
  2. [VBA-E] Selection d'une plage de données problématique
    Par Fab117 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/01/2007, 14h41
  3. [VBA-E]Selection plage de cellules variable
    Par julien5 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 14h51
  4. [VBA-E] selection plage + filtre auto
    Par noug dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/05/2006, 15h57
  5. [VBA] excel croisé dynamique et plage de données variables
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/01/2006, 18h14

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