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 :

Simplifier le codage


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut Simplifier le codage
    Salut a tous

    Voula j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = Range("B65536").End(xlUp).Row To 2 Step -1
            If Range("B" & i).Value = "Auto" Then
               Range("U" & i).Value = "Automotrice"
            End If
        Next i
    Qui je pense devrai marcher

    Mon problème est que il me faudrait réécrire ce code environ 60 fois (avec une légère différence bien sur)

    Si en B j'ai "Auto" en U je veux "Automotrice"
    Mais en B je peu avoir "GP" et en U avoir "Presse"
    en B "KT" et en U "Fauch" ....

    Je voudrais simplement savoir si il y a moyen de simplifier la saisi du code ??

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Avec un select case peut etre
    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
    Dim Remplacement As String
     
    For i = Range("B65536").End(xlUp).Row To 2 Step -1
        Select Case Range("B" & i).Value
            Case "Auto"
                Remplacement = "Automotrice"
     
            Case "GP"
                Remplacement = "Presse"
     
            Case ....
     
     
        End Select
     
        If Remplacement <> "" Then
            Range("U" & i).Value = Remplacement
            Remplacement = ""
        End If
    Next i

  3. #3
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Merci beaucoup Minick

    Même si sa a l'air de bien marcher, je ne suis pas certain que se soit plus rapide a faire

    Merci quand même

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Re,

    Une autre solution consisterait a utiliser une table de correspondance et d'utiliser une formule (recherchev) pour retrouver les données.
    Et cette partie de code se resumerait a quelques lignes pour mettre la formule en U puis copier en valeur le resultat.
    Cela aurait d'ailleur un avantage, si tu as de nouvelles 'references', il suffit de modifier la table
    et tu ne touches pas a ton code.

  5. #5
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Ok

    effectivement je pense que se serrait l'idéal

    Mais là je ne sais pas dutout comme faire un truc comme ca

    Si tuu pouvait m'en dire un peu plus STP

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    et un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro1()
    Dim cel As Range, tableau As Range
    'tu crées une nouvelle feuille (ex : "feuil2" avec exemple en A les references (Auto, chaussettes,...), en B les categories correspondantes (automotrice, vetements, etc.)
    Set tableau = Sheets("feuil1").Range("b2:b" & Range("B65536").End(xlUp).Row)
    For Each cel In tableau
        cel.Offset(0, 1) = Sheets("feuil2").Range("a2:a" & Sheets("feuil2").Range("A65536").End(xlUp).Row).Find(cel).Offset(0, 1)
    Next cel
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Merci casefayere sa me semble pas mal

    Mais y t-il mas moyen de faire a partir d'un autre fichier plutôt que de faire depuis une autre feuille (a la place de "feuil2") parce que ma macro supprime toute les feuille existante du fichier afin de ne garder que les données définitive.

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    si ton fichier de recherche est ouvert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro1()
    Dim cel As Range, tableau As Range
    'tu crées une nouvelle feuille dans l'autre classeur (ex : "feuil2" avec exemple en A les references (Auto, chaussettes,...), en B les categories correspondantes (automotrice, vetements, etc.)
    Set tableau = Sheets("feuil1").Range("b2:b" & Range("B65536").End(xlUp).Row)
    For Each cel In tableau
        cel.Offset(0, 1) = workbooks("ton_classeur.xls").Sheets("feuil2").Range("a2:a" & workbooks("ton_classeur.xls").Sheets("feuil2").Range("A65536").End(xlUp).Row).Find(cel).Offset(0, 1)
    Next cel
    End Sub
    pour travailler avec un classeur fermé, beaucoup de posts traitent du sujet et je ne suis pas très agguerri à ce sujet

    bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Sur le pprincipe que j'avais evoque avec une formule (Recherchev):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim ShtSrc As Worksheet, ShtDst As Worksheet
     
        Set ShtDst = ThisWorkbook.Sheets("Feuil1")
        Set ShtSrc = Workbooks("TableCorrespondances.xls").Sheets("Table")
     
        With ShtDst.Range("U2:U" & ShtDst.Range("B65536").End(xlUp).Row)
            .FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC2,'[" & ShtSrc.Parent.Name & "]" & ShtSrc.Name & "'!C1:C2,2,0)),RC2,VLOOKUP(RC2,'[" & ShtSrc.Parent.Name & "]" & ShtSrc.Name & "'!C1:C2,2,0))"
            .Calculate
            .Value = .Value
        End With
    Cela suppose que le fichier TableCorrespondances soit ouvert

Discussions similaires

  1. [API] Codage d'un moniteur de messages debug
    Par Pierre Castelain dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 15/01/2004, 20h47
  2. [Interbase] [Trigger] Codage
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 06/11/2003, 15h51
  3. [xsl] affichage arbre simplifié
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/06/2003, 12h11
  4. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 12h00
  5. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 17h49

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