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 :

Conditions sur libellé et non nom de colonne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Conditions sur libellé et non nom de colonne
    Bonjour,

    Mon problème du jour est le suivant :

    Mon client m'a demandé d'écrire une macro de contrôle automatisé de règles de saisie dans un fichier Excel, ce que j'ai fait.

    Sauf qu'aujourd'hui, mes tests sont réalisés sur les colonnes comme suit :

    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
     
      For i = 3 To Nbenreg
     
        ''''Récupération de valeurs de colonnes
     
                Code_K = Sheets("Fichier de travail").Range("A" & i).Value
                Nom = Sheets("Fichier de travail").Range("G" & i).Value
                Code_Chantier = Sheets("Fichier de travail").Range("K" & i).Value
                Date_Cadrage = Sheets("Fichier de travail").Range("AM" & i).Value
                Date_Engagement = Sheets("Fichier de travail").Range("AN" & i).Value
                Date_Livraison = Sheets("Fichier de travail").Range("AO" & i).Value
                Date_Deploiement = Sheets("Fichier de travail").Range("AS" & i).Value
                Statut = Sheets("Fichier de travail").Range("AY" & i).Value
                Benefices = Sheets("Fichier de travail").Range("Q" & i).Value
                Type_Ligne = Sheets("Fichier de travail").Range("B" & i).Value
                Impact = Sheets("Fichier de travail").Range("AU" & i).Value
                Descriptif_Projet = Sheets("Fichier de travail").Range("N" & i).Value
     
            ''''Pour n'effectuer les contrôles que sur les lignes dont la "Validation" vaut "OK"
            If Sheets("Fichier de travail").Range("C" & i) = "OK" Then
     
            ''''Contrôle du statut en fonction de la date_arretee
     
                ''''Si la date_deploiement n'est pas vide,
                ''''et qu'elle est antérieure à la Date_Arretee
                ''''alors le statut doit être "déployé"
                If Date_Deploiement <> "" And Date_Deploiement <= Date_Arretee And Statut <> "déployé" Then
     
                    DernLignVide = Sheets("CR").Range("A1").End(xlDown).Row + 1
                    Ligne_Erreur Code_K, DernLignVide, "Le statut doit valoir 'déployé'"
    Or, ils réalisent que leur fichier risque d'évoluer et que des colonnes pourront être ajoutées ou supprimées.

    Donc, ils souhaitent que la macro ne se base plus sur les noms de colonnes (AB / X / AF etc...) mais sur des libellés (par exemple, je veux contrôler le contenu de la colonne ayant pour valeur écrite dans sa première ligne "Date_cadrage").

    Cela vous semble-t-il réalisable ? Si oui, comment ?

    Merci d'avance pour vos retours.

    Cordialement,

    CuisineAuBeurre

  2. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu sur le Forum,

    Sachant que la méthode Find renvoie un objet Range, tu peux utiliser cette méthode pour définir la colonne adéquate.

    Méthode Find

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par CuisineAuBeurre Voir le message
    Donc, ils souhaitent que la macro ne se base plus sur les noms de colonnes (AB / X / AF etc...) mais sur des libellés (par exemple, je veux contrôler le contenu de la colonne ayant pour valeur écrite dans sa première ligne "Date_cadrage").
    Plus simple : nommer les plages.
    https://support.office.com/fr-fr/art...2-ABD7FF379C64
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Nom_plage")(no_Ligne).Value
    Tu peux aussi nommer uniquement les entête et atteindre la ligne souhaitée avec un Offset partant de cette référence.
    https://msdn.microsoft.com/fr-fr/lib...0(v=office.15)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Nom_Entete").Offset(no_Ligne, 0).Value
    Ces solutions sont plus simples et plus rapides qu'un Find.

    Perso, je n'utilise Find pour repérer une entête de colonne que si je ne maitrise pas le fichier source (par exemple dans un fichier obtenu par export d'une autre application).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Que se passera-t-il lorsqu'ils basculeront la colonne ayant pour en-tête "Date_cadrage" de la colonne C vers la colonne W ? Et qu'ils prendront la colonne W "Statut" pour la passer vers la colonne D ?

    Ca va suivre ?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans tous mes développements, je n'utilise jamais les numéros de colonnes d'une façon statique.
    Deux méthodes possibles pour connaître le numéro de la colonne à traiter soit la méthode Find comme évoqué plus haut soit WorksheetFunction.Match (la fonction EQUIV d'excel en français)
    Avec ces deux méthodes, c'est entièrement dynamique (prévoir évidemment un message signalant qu'une colonne n'existe pas pour éviter les surprises.
    Je prévois également la liste des étiquettes que je traite dans une feuille paramètre (ainsi la maintenance est aisée)

    Si des formules doivent intervenir, les construire d'une façon dynamique
    A lire éventuellement sur le dernier sujet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par CuisineAuBeurre Voir le message
    Que se passera-t-il lorsqu'ils basculeront la colonne ayant pour en-tête "Date_cadrage" de la colonne C vers la colonne W ? Et qu'ils prendront la colonne W "Statut" pour la passer vers la colonne D ?
    Si c'est fait correctement avec des "Couper / Insérer les colonnes coupée", ça ne posera aucun problème.

    Maintenant, s'ils font ça comme des sagouins, aucun code ne sera assez solide pour garantir le fonctionnement.
    Même avec un Find, que se passera-t-il lorsqu'il déplaceront la colonne "Date_cadrage" pour mettre ailleurs "Date cadrage" ou qu'ils déplaceront le colonne "Statut" pour mettre "Statuts" ?
    Sans un minimum de rigueur et une notice, il est impossible de garantir une application futurproof.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    Maintenant, s'ils font ça comme des sagouins, aucun code ne sera assez solide pour garantir le fonctionnement.
    Même avec un Find, que se passera-t-il lorsqu'il déplaceront la colonne "Date_cadrage" pour mettre ailleurs "Date cadrage" ou qu'ils déplaceront le colonne "Statut" pour mettre "Statuts" ?
    Sans un minimum de rigueur et une notice, il est impossible de garantir une application futurproof.
    Nous sommes bien d'accord que question rigueur c'est plus compliqué avec Excel qu'avec Access

    Lorsque je livre une application, j'indique bien à mon client ce qu'il peut faire et pas faire et la modification des libellés de colonnes concernés par l'application en fait partie sinon je dégage ma responsabilité.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    l'utilisation de tableaux structurés me parrait tout indiqué dans ce contexte tellement plus simple
    sachant que l'on peut determiner une colonne par son intitulé que l'on peut determiner la plage d'une colonne ,etc,etc.....
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [AC-2003] Condition sur coche oui/non dans formulaire
    Par MONOVOLTIN dans le forum Access
    Réponses: 11
    Dernier message: 30/03/2015, 15h39
  2. Réponses: 7
    Dernier message: 08/08/2011, 11h42
  3. Réponses: 0
    Dernier message: 03/06/2009, 11h09
  4. Répétitions de nom de colonne sur un select
    Par jeanpaul702 dans le forum Oracle
    Réponses: 3
    Dernier message: 07/06/2006, 10h57
  5. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27

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