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 :

Aide pour simplification macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut Aide pour simplification macro
    Bonjour,


    J'ai fait ce code macro mais j'aimerais le simplifier car c'est la meme opération qui est effectuée

    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
    NBMAC = Sheets("feuillepara").Range("B2").Value 'recuperer la valeur du nombre de mac
     
    On Error Resume Next
     
     
    For x = 1 To NBMAC
    Err = 0
    Cells.Find(What:="Code 1").Select
    If Err = 0 Then
    Cells.Find(What:="Code 1").Activate
    RESULTAT1 = Selection.Offset(x + 2, 1).Value
     
    Else
    MsgBox "Code 1 manquant dans le fichier importé"
    End If
     
    Err = 0
    Cells.Find(What:="Code 2").Select
    If Err = 0 Then
    Cells.Find(What:="Code 2").Activate
    RESULTAT2 = Selection.Offset(x + 2, 1).Value
     
    Else
    MsgBox "Code 2 manquant dans le fichier importé"
    End If
     
     
    Range("H" & 40 + x) = RESULTAT1 + RESULTAT2
    Next x


    Merci par avance

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    bonjour,
    les fonctions de feuilles de feuille de calcul doivent te simplifier le code je crois.
    une ligne avec SumIf ou SumIfs selon tes besoins.

    Si ça peut aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Resultat") = WorksheetFunction.SumIf(ma_Plage_donnee, mon_critere, ma_Plage_additionnable)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    je ne pense pas que ce soit une simplification de la macro, y a-t-il d'autres idées ?

  4. #4
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonsoir,

    Désolé, je croyais que tu voulais une indication de simplification.

  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
    13 137
    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 : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par teddy72000 Voir le message
    je ne pense pas que ce soit une simplification de la macro, y a-t-il d'autres idées ?
    En plus d'afficher ton code, il serait intéressant que tu expliques ce que tu souhaites faire.
    En ne le faisant pas tu demandes que l'on déchiffre ton code en essayant de deviner où tu veux en venir.
    C'est un peu comme si tu demandais à un traducteur de remettre au clair une tentative de traduction sans lui donner le texte d'origine.
    Je crois que la piste proposée par NVCfrm est une bonne idée.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    NBMAC correspont au nombre de ligne dans un fichier importé (exemple : 10)

    Je recherche le code 1 dans tous le fichier puis je me decale d'une colonne et descend de trois ligne : je recupere la valeur de la cellule

    Je fais cela pour toutes les lignes x to NBMAC

    Je recherche le code 2 dans tous le fichier puis je me decale d'une colonne et descend de trois ligne : je recupere la valeur de la cellule

    je fais cela pour toutes les lignes x to NBMAC.

    EN cellule H40 j'affiche le resultat des valeurs trouvées pour le code 1 et le code 2 pour la premiere ligne et ainsi de suite jusqu'a NBMAC

    Je ne sais pas si j'ai été clair

  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
    13 137
    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 : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu parles de faire une recherche dans tout le fichier mais je suppose que tu veux dire dans toute la feuille ?
    Parce-que un fichier Excel est un classeur et un classeur peut avoir plusieurs feuilles.
    A quoi correspond Code 1, d'où vient-il ?
    Est-ce une constante ou correspond-il à une référence trouvée à la première ligne ?
    Dans cas là où le lis-tu ? ton code ne laisse rien transparaître.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    bonjour,



    oui c'est une recherche dans une feuille.

    voir l'image ci-dessous pour voir la feuille excel ou je fais les recherches.

    http://www.hostingpics.net/viewer.ph...594Capture.jpg

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 137
    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 : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu avais expliqué plus tôt comment était organisée ta feuille de données tu aurais eu une réponse plus rapide.
    Ce que tu montres là est l'illustration de l'utilisation de la fonction EQUIV ou MATCH pour la version anglaise d'excel et VBA.
    On cherche d'abord le n° de colonne où se trouve le code
    Avec Excel la formule ci-dessous d'après ton illustration renverra 3 (colonne C)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV("Code 2";$A$1:$P$1;0)
    En VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Colonne = Application.WorksheetFunction.Match("Code " & Elem, rng, 0)
    Elem est la variable d'une boucle ici Elem vaut par exemple 2, rng est une variable objet représentant la plage $A$1:$P$1 et donc la variable Colonne aura comme valeur 3
    Si je me réfère à ton explication
    Je recherche le code 2 dans tous le fichier puis je me decale d'une colonne et descend de trois ligne : je recupere la valeur de la cellule
    je fais cela pour toutes les lignes x to NBMAC.
    Voici un début de code qui devrait te mettre sur la piste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub t()
     Dim Elem As Integer, Colonne As Integer, Valeur As Double
     Dim sht As Worksheet, rng As Range
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     Set rng = sht.Range("A1:P1")
     For Elem = 1 To 8 ' (Nombre de code)
      Colonne = Application.WorksheetFunction.Match("Code " & Elem, rng, 0)
      Valeur = sht.Range("A1").Offset(3, Colonne)
     Next
    End Sub
    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

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    merci pour ta réponse je vois un peu plus clair.

    En faites ce que je voulais c'est rechercher le code 1 et le code 2 pour la ligne 4 et additionner B4+D4 (on recherche le code et on se decale d'une colonne et de 3 lignes pour le premier resultat et de x lignes pour les resultats suivants) et faire de meme pour les lignes suivantes 5 à 10

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 137
    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 : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu examines le code et que tu fais des tests tu devrais pouvoir t'en sortir.
    Boucle de 1 à 8 soit Code 1 à Code 8. donc si tu ne veux que Code 1 et Code 2 tu boucles jusqu'à 2.
    Pour additionner les deux, tu utilises une variable intermédiaire par exemple qui retient la valeur de Code 1
    Pour le déplacement, c'est Offset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sht.Range("A1").Offset(3, Colonne)
    La syntaxe est Offset(ligne, colonne)
    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

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    merci, par contre pour la variable intermediaire je ne sais pas faire peux tu m'aiguiller ?

    Par contre si je veux additionner des codes discontinus , exemple : code 1 code 5 code 6 comment l'indiquer pour la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For elem = 1 and 5 to 6
    , je sais que ce code ne fonCtionne pas mais c'est pour donner une idée

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 137
    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 : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une solution parmi d'autres.
    J'ai ajouté une variable nommée Valeur1 qui prend la valeur de la variable nommée Valeur quand la valeur de la variable Elem est impaire et fait la somme si Elem est paire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub t()
     Dim Elem As Integer, Colonne As Integer, Valeur As Double, Valeur1 As Double
     Dim sht As Worksheet, rng As Range
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     Set rng = sht.Range("A1:P1")
     For Elem = 1 To 8 ' (Nombre de code)
      Colonne = Application.WorksheetFunction.Match("Code " & Elem, rng, 0)
      Valeur = sht.Range("A1").Offset(3, Colonne)
      If Elem Mod 2 Then Valeur1 = Valeur Else Valeur1 = Valeur1 + Valeur: MsgBox "La somme est " & Valeur1
     Next
    End Sub
    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

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut
    ok merci pour ton aide !!!!

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

Discussions similaires

  1. Besoin d'aide pour une macro en visual basic
    Par raikkonen3 dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/10/2008, 18h57
  2. Aide pour une macro mêlant Excel et Lotus!
    Par andyranai dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/05/2008, 09h25
  3. [VBA-E]SOS besoin d'aide pour un macro
    Par lecossais dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 18/06/2006, 18h57
  4. [VBA-E] Aide pour simplification de mon code.
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 11h34
  5. [VBA] Excell : demande d'aide pour une macro
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/01/2006, 16h28

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