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 une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autres

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Par défaut Simplifier une macro
    Bonjour le forum, les intervenants,

    Je reviens vers vous pour avoir un avis sur mon code.

    La partie du code concerne le bouton valider de mon userform1.

    Le but étant de copier/coller le contenu de mes 4 ComboBox sur mon fichier de saisie suivant certaines conditions.

    Autrement dit : indiquer le même commentaire sur plusieurs lignes suivant conditions.

    Voici mon 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
    Ref1 = ActiveCell.Offset(0, -3) 'ligne H
        Ref2 = ActiveCell.Offset(0, -5) 'ligne F
        Ref3 = ActiveCell.Offset(0, -8) 'ligne C
        Ref4 = ActiveCell.Offset(0, -10) 'ligne A
        With Sheets("exemple")
             For i = 7 To [K10000].End(xlUp).Row
                If OptionButton1 = True Then
                     If Cells(i, "H") = Ref1 And Cells(i, "F") = Ref2 And Cells(i, "A") = Ref4 Then
                        If Me.ComboBox1 = "POSITIF" Then
                        .Range("O" & ActiveCell.Row & ":R" & ActiveCell.Row).Copy Destination:=Range("O" & i)
                        .Range("L" & ActiveCell.Row).Copy Destination:=Range("L" & i)
                        .Range("G" & i).Copy Destination:=Range("N" & i)
                        Else
                        .Range("O" & ActiveCell.Row & ":R" & ActiveCell.Row).Copy Destination:=Range("O" & i)
                        .Range("L" & ActiveCell.Row).Copy Destination:=Range("L" & i)
                        .Range("G" & i).Copy Destination:=Range("N" & i)
                         Range("N" & i).Select
                         Selection = Range("N" & i) * 0
                        End If
                    End If
                End If
                If OptionButton2 = True Then
                     If Cells(i, "H") = Ref1 And Cells(i, "F") = Ref2 And Cells(i, "A") = Ref4 And Cells(i, "C") = Ref3 Then
                        If Me.ComboBox1 = "POSITIF" Then
                        .Range("O" & ActiveCell.Row & ":R" & ActiveCell.Row).Copy Destination:=Range("O" & i)
                        .Range("L" & ActiveCell.Row).Copy Destination:=Range("L" & i)
                        .Range("G" & i).Copy Destination:=Range("N" & i)
                        Else
                        .Range("O" & ActiveCell.Row & ":R" & ActiveCell.Row).Copy Destination:=Range("O" & i)
                        .Range("L" & ActiveCell.Row).Copy Destination:=Range("L" & i)
                        .Range("G" & i).Copy Destination:=Range("N" & i)
                         Range("N" & i).Select
                         Selection = Range("N" & i) * 0
                        End If
                    End If
                End If
            Next i
        End With
    Je vous remercie.

    Je suis preneur de vos conseils.

    Bonne journée le forum.

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour leschiffres,

    Sélectionne toute tes données -> Mettre sous forme de tableau -> Donne-lui un nom pertinent (ex : t_data)

    Ensuite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim Wb As ThisWorkbook
    Dim WbO As Worksheet
    Dim t As ListObject
    Dim Cible As Range
     
    Set WbO = Wb.Sheets("exemple")
    Set t = WbO.ListObjects("t_data")
     
    For Each Cible In t.ListColumns(1).DataBodyRange
         'Procédure - joue avec les Offset comme tu l'as fait dans ton code
    Next Cible
    Tu n'as ainsi plus besoin de chercher le numéro de la dernière ligne, car le For Each Cible... va parcourir tout le tableau

    A quoi correspond ton "Active.Cell" ? Quel est son rôle ? Quelles informations y sont stockées ?

  3. #3
    Membre habitué
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autres

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Par défaut
    Bonjour révèr, merci d'avoir regardé mon code.

    ActiveCell ( ligne K pour afficher mon userform1) sert à déterminer la plage de données pour laquelle la macro s'exécute :


    Cas1 : pour la même facture, la même référence, la même commande ( plusieurs produits) = afficher le même commentaire sur plusieurs ligne ( la plage de ActiveCell CAS 1)

    Cas 2 : pour la même facture, la même référence, la même commande, le même produit que "ActiveCell" = afficher le même commentaire sur plusieurs produit identique que la ligne sélectionnée ( ActiveCell de la plage CAS 2)

    Je cherche à stocker les deux conditions.

    Merci révèr.

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    "Sert à déterminer la plage" - de quelle manière ? Dans la Cell(i,"K") que renseignes-tu pour déterminer cette plage ?

    Le UserForm doit s'afficher automatiquement dès que quelque chose est renseigné dans Cell(i,"K") ?

    Ta base de données a donc plusieurs niveaux de détails ?

    Une commande a 1 numéro de facture unique mais peut posséder contenir plusieurs produits qui auront eux-mêmes une référence qui leur est propre ?

    Si chaque produit a une référence qui lui est propre, dans ce cas tu peux directement lier cette référence au produit en question. (à travers une BDD Produits par exemple)

    Quelles sont les informations qui composent tes 4 ComboBox ? 1 ComboBox par critère ?
    Il serait plus judicieux, de mon point de vue, de ne demander à l'utilisateur de choisir successivement les critères ce qui te permettra de...

    Mettre à jour successivement les ComboBox en fonction des valeurs précédentes.

    La valeur saisie en ComboBox1 mettra à jour la Liste Déroulante de la ComboBox2, qui elle même mettra à jour celle de la ComboBox3 etc... jusqu'à arriver à un stade où tu as une référence unique.

    Procéduralement parlant :
    1) ComboBox1 : Initialisation de la Liste Déroulante par les numéro de commandes
    2) Choix par l'utilisateur et réalisation d'un filtre automatique en conséquence
    3) ComboBox2 : Initialisation de la Liste Déroulante des références produits en fonction de ComboBox1.Value
    4) Choix par l'utilisateur et réalisation d'un filtre automatique en conséquence
    5) Copie du résultat

    Je pars du postulat qu'un Numéro de Facture est propre à 1 Commande, et que 1 Référence est propre à 1 produit. Me trompe-je ?

  5. #5
    Membre habitué
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autres

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Par défaut
    Re bonjour révèr, merci d'avoir pris un peu de votre temps.

    J'ai essayé de travailler avec des filtres, mais sans succés ! j'avoue je suis un peu perdu.

    je ferais un fichier test que je posterai juste pour voir mon raisonnement, je pense que c'est mieux.

  6. #6
    Membre habitué
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autres

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Par défaut
    Bonsoir le forum, révèr, les intervenants

    Ci-joint un fichier test pour mieux comprendre ma problématique.

    Je suis preneur de toute proposition.

    simplifier une macro.xlsm

Discussions similaires

  1. [XL-2007] Simplifier une macro
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/05/2015, 17h06
  2. Simplifier une macro
    Par chito79000 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/05/2015, 11h22
  3. [XL-2007] Je cherche à simplifier une macro
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/05/2015, 04h55
  4. [XL-2010] Simplifier une macro
    Par Ardiden31 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 14/04/2015, 14h14
  5. {VBA Excel} Simplifier une macro avec une copie
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/06/2007, 14h38

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