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 :

Problème de définition de plages


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Par défaut Problème de définition de plages
    Bonjour à tous,

    J'ai le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'Désignation article
    Sheets("Extract. Article").Activate
    Set Plage_article = Range([D2], [D2].End(xlDown).Offset(0, 2))
     
    Sheets("Feuil5").Activate
    Range("B2").Activate
    ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-1],Plage_article,2,0)"
    Columns("B:B").EntireColumn.AutoFit
    Le problème se trouve dans ma formule de recherchev. Il ne reconnait pas la Plage_article définie précédemment.

    Contrainte impérative : la plage est variable d'un mois sur l'autre. Elle ne peut donc pas être figée.

    Ah oui, j'ai oublié de préciser que j'ai déclaré ma plage comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim Plage_article as Range
    Avez-vous une idée de la solution ?
    merci d'avance !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je serais toi, je mettrais d'abord en place dans Excel

    Nommer une plage avec DECALER pour qu'elle soit dynamique, puis utiliser cette plage, via VBA si c'est nécessaire, via une formule directement mise en Feuil5!B2 par Excel si ton code VBA ne sert qu'à cela...

    Question: As-tu impérativement besoin de VBA? (Il est toujours utile d'essayer de s'en passer, dans un premier temps)

    PS: Dans la mesure du possible, éviter les Select, c'est lourd, c'est lent, c'est pas beau, c'est difficilement maintenable...

    Tu peux aussi préciser ce que tu souhaites réaliser, en français d'abord (sans code) car il y a peut-être d'autres pistes à explorer.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Par défaut
    Oui, je dois absolument utiliser vba. Je n'ai mis qu'une partie du code complet.

    En fait, c'est pour une mise à jour mensuelle d'indicateur, qui prend du temps à réaliser et à analyser. Donc je souhaite automatiser la mise en forme et les calculs au maximum pour n'avoir que les extractions et l'analyse à faire.

    De plus, comme je le dis, la plage article est variable. Un mois, on peut avoir 5000 lignes d'articles, le suivant, ça peut être plus ou moins.

    Je ne comprends pas...qu'entends-tu par "éviter les SELECT" ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ok.

    Mais cela n'empêche pas de nommer une plage dans Excel en utilisant DECALER pour la feuille Recup. Articles et d'utiliser ce nom dans la formule que tu crées par VBA.

    Si tu donnais plus de code, on pourrait probablement le rendre plus propre.

    Par Eviter les SELECT, je veux dire que tu n'es pas obligé, en VBA, de sélectionner des feuilles ou des cellules pour travailler avec. Un code qui utiliser Select est souvent issu de l'enregistreur de macros (que certains conseillent, à tort à mon avis, pour débuter en VBA).

    Il y moyen d'écrire un code plus propre, plus efficace et plus "maintenable" sans Select. Mais pour pouvoir t'aider sur ce coup-là, il nous faudrait plus d'explications sur ce que tu souhaites obtenir.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Par défaut
    Voici le code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Dim x As Integer
    Dim Plage_article As Range
     
    'Copie de la colonne article
    Sheets("Extract. Article").Select
    Range([D2], [D2].End(xlDown)).Select
    Selection.Copy
    Sheets("Feuil5").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
     
    'Tri de la colonne article
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
    'Formule pour identifier les doublons
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],""1"","""")"
    Range("B2").Select
    Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, -1).End(xlDown).Offset(0, 1))
     
    'Copier/coller spécial valeurs des deux colonnes A et B
    Range([A2], [A2].End(xlDown).Offset(0, 1)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
    'Trouver la 1ère valeur "1"
    Range("B2").Select
    x = 2
    While Range("B" & x).Value <> 1
        x = x + 1
    Wend
    Range("B" & x).Offset(0, -1).Activate
    Range(ActiveCell, ActiveCell.End(xlDown).Offset(0, 1)).Select
    Selection.Delete (xlShiftToLeft)
     
    'Doublons supprimés et articles fabriqués triés
    'Cette partie sert à calculer le taux de non conformité sur les articles produit.
     
     
    'Désignation article. Sert à afficher la désignation des articles et leurs familles (pour les stats).
    Sheets("Extract. Article").Activate
    Set Plage_article = Range([D2], [D2].End(xlDown).Offset(0, 2))
     
    Sheets("Feuil5").Activate
    Range("B2").Activate
    ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-1],Plage_article,2,0)"
    Columns("B:B").EntireColumn.AutoFit
    Pour la petite histoire, la feuille où se trouve ce code a pour but d'afficher un tableau de données pour mon indicateur dans le but de générer des affichages, avec ratio etc...
    Pour créer ce tableau, j'utilise 3 feuilles dans lesquelles je viens coller 3 tableaux de données extraits de nos reportings (données articles, non conformités par machine et non conformités par article).

    ce que je veux faire, c'est : automatiser la création du tableau de données pour gagner du temps, sachant comme je l'ai dit, que l'on ne fabrique pas tous les produits tous les mois. Il me faut donc extraire d'un des tableaux sources la liste des articles fabriqués sur le mois puis effectuer un tri pour que leur code n'apparaissent qu'une fois, afficher leur désignation, famille, et ensuite, faire les sommes des non conformités.

    Je touche à VBA par mes différentes expériences mais ne suis pas un pro. Si tu me dis que les SELECT font perdre du temps, je veux bien de te croire, mais je n'ai pas trouvé d'autres solutions pour le moment. Tout simplement, parce que je suis pressé par le temps pour créer ces indicateurs (audits dans l'air) et que j'ai d'autres choses à côté qui font que je ne peux pas me consacrer toutes mes journées à ce langage...

    En tout cas, merci pour ton aide !

Discussions similaires

  1. [Système] Problème de définition des variables
    Par SLAM JACK dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 19h53
  2. [Configuration] Problème sur définition de constante
    Par Yobs dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 24/03/2006, 11h40
  3. Réponses: 1
    Dernier message: 21/12/2005, 19h08
  4. Réponses: 2
    Dernier message: 17/08/2005, 11h20
  5. Réponses: 22
    Dernier message: 05/07/2005, 00h04

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