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 :

Attribution d'une plage de cellules à une variable [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut Attribution d'une plage de cellules à une variable
    Bonjour,

    dans le cadre d'un projet professionnel, je réalise une macro qui vérifie les écarts entre deux fichiers (A et B).
    Chaque ligne contient un identifiant unique qui est la combinaison de 2 colonnes.

    En résumé, rien de bien sorcier :
    - J'applique un filtre.
    - Pour chaque ligne du fichier A, je compare les 2 colonnes (qui servent d'identifiant) avec 2 autres colonnes (aussi identifiant) du fichier B, pour chaque ligne aussi. Je procèdes avec des FOR EACH ligne IN plageA.Rows
    - Si les 2 colonnes du fichier A ne sont pas trouvées dans le fichier B, les 2 colonnes du fichier A sont colorées en rouge.


    Tout fonctionne très bien, sauf que la définition de mon Range pose problème, puisqu'il me prend la première ligne (celle d'en-tête avec les filtres).
    Par conséquent, les en-tête des deux colonnes sont colorés en rouge, car inclus dans mes plages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set plageA = Workbooks(fichier_A).Sheets(feuille_fichier_A).Range("_FilterDataBase").SpecialCells(xlCellTypeVisible)
    Set plageB = Workbooks(fichier_B).Sheets(feuille_fichier_B).Range("_FilterDataBase").SpecialCells(xlCellTypeVisible)

    Pouvez-vous m'aider à attribuer à mes variables plageA et plageB uniquement les cellules filtrées et visibles, SANS la ligne d'en-tête ? S'il vous plait.
    Ca peut paraitre tout simple mais je sèche ... malgré mes recherches (j'ai trouvé beaucoup de solutions, mais aucune ne me correspond).

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    en redimensionnant et en décalant la plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test_forum()
        Dim sh As Worksheet
        Dim plageA As Range
        Set sh = Workbooks(fichier_A).Sheets(feuille_fichier_A)
        Set plageA = sh.Range("_FilterDataBase").SpecialCells(xlCellTypeVisible)
        ' redimensionne la plage(une ligne en moins) et la décale une ligne vers le bas
        Set plageA = plageA.Resize(plageA.Rows.Count - 1).Offset(1, 0)
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Merci pour ton aide Philippe !

    J'avais déjà essayé, mais j'ai une erreur d'exécution :
    Erreur d'exécution 1004
    Erreur définie par l'application ou par l'objet


    Causée par la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plageA = plageA.Resize(plageA.Rows.Count - 1).Offset(1, 0)
    Grosse incompréhension

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    je ne connaissais pas : Range("_FilterDataBase")
    mais je viens de tester et ça marche, donc ma question est : as tu bien défini toutes tes variables ??
    Du genre : Dim plageA as Range …, etc
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Essaie de chercher la cause en testant chaque partie.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Set plageA = plageA.Resize(plageA.Rows.Count - 1).Offset(1, 0)
    plageA.Select
    ' puis
    Debug.Print plageA.Rows.Count
    ' puis
     plageA.Resize(plageA.Rows.Count - 1).Select
    ' tu peux ainsi vérifier si les références sont bonnes

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Merci pour vos réponses !
    Oui, j'ai bien défini toutes mes variables, dont les Range


    La première sélection fonctionne à merveille, sans surprises, j'ai bien ma place sélectionné correctement (j'avais déjà vérifié de mon côté) :
    Le problème vient du fait que ma plage ne contient qu'une ligne. La procédure suivante me retourne 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print plageA.Rows.Count
    D'où l'impossibilité de redimensionner, car on aurait donc 0 lignes en réduisant plageA d'1 ligne.
    Cette ligne plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plageA.Resize(plageA.Rows.Count - 1).Select

    Peut-être une histoire de lignes non-adjacentes ?
    Mais alors pourquoi mon FOR EACH fonctionne ? C'est dingue !

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

Discussions similaires

  1. Affecter une plage de cellules à une variable tableau
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2013, 10h19
  2. [XL-2007] recherche d'une valeur texte dans une plage de cellules
    Par blackstrange dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 13/07/2012, 17h26
  3. [Toutes versions] Rechercher une valeur max dans une plage de cellules variable
    Par Laur3nt62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2011, 20h34
  4. [XL-2000] Supprimer ligne si cellule d'une colonne = 0, sur une plage de cellules
    Par audesara dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/05/2011, 17h16
  5. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 16h07

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