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 :

Identifier les nombres opposés


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut Identifier les nombres opposés
    Bonjour à tous,

    Je suis débutant sur VBA.
    J'ai trouvé une macro qui me convient totalement. Elle permet d'identifier les nombres opposés d'une liste.
    J'aimerai comprendre la macro pour pouvoir aussi la modifier à ma convenance. Est-ce que quelqu'un pourrait me l'explquer ligne par ligne ? (avec une sorte de lisez)
    Merci d'avance.

    La voici ci-dessous :
    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
    Sub test()
     
    Dim i%, j%
    k = Range("H1").End(4).Row
    For i = 2 To k - 1
        Y = False
        If Cells(i, 9) = 0 Then
            For j = i + 1 To k
                If Cells(i, 8) + Cells(j, 8) = 0 Then
                    If controle(i, j) Then
                        Cells(i, 9) = x + 1
                        Cells(j, 9) = x + 1
                        x = x + 1
                        Y = True
                    End If
                End If
                If Y Then Exit For
            Next j
        End If
    Next i
    End Sub
     
    Function controle(i%, j%) As Boolean
    controle = (Cells(i, 6) = Cells(j, 6)) And Cells(j, 9) = 0
    End Function

  2. #2
    Expert éminent 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
    Par défaut
    Quand tu ne comprends pas un élément, tu places ton curseur dessus et tu appuies sur la touche F1.
    Ca t'ouvrira l'aide VBA correspondant à cet élément et ça te permettra de le comprendre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    Merci Menhir ! C est déjà plus clair.
    Cependant peux tu m expliquer pq on ajoute -1 apres For i=2 to k. Egalement ceux que controle Y=false ?

    Merci.

  4. #4
    Expert éminent 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
    Par défaut
    Citation Envoyé par PAKA27 Voir le message
    Cependant peux tu m expliquer pq on ajoute -1 apres For i=2 to k.
    Parce qu'il est inutile de contrôler la dernière ligne étant donné qu'il n'y a pas de lignes en dessous à laquelle la comparer.

    Egalement ceux que controle Y=false ?
    Cette variable est initialisée à FAUX avant la boucle de contrôle.
    Ensuite, elle est mise à VRAI si le test à l'intérieur de la boucle se déclenche au moins une fois.
    Donc, sortie de boucle, on sait que le test a été vrai au moins une fois.

    Perso, je trouve cette façon de faire assez maladroite et pas vraiment optimisée.
    Surtout que le test sur cette variable est en dehors de la structure If mais à l'intérieur de la structure For.
    Il aurait été plus simple de mettre le Exit For à l'intérieur de la structure If.

    Mais la quasi absence de déclarations de variable dans ce code montre que son auteur n'est pas vraiment un spécialiste.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Citation Envoyé par PAKA27 Voir le message
    Cependant peux tu m expliquer pq on ajoute -1 apres For i=2 to k.
    La ligne juste avant calcule K comme étant la dernière ligne d'une colonne. K - 1 signifie que la boucle fait tourner i depuis la valeur 2 jusqu'à la valeur k - 1. Donc l'avant dernière ligne remplie.

    Citation Envoyé par PAKA27 Voir le message
    Egalement ceux que controle Y=false ?
    Y=False n'est pas un contrôle. C'est une assignation. Le code met Y à false, et plus loin, Y sert de condition de sortie. Il y a une fonction controle définie plus bas, et quand elle est vraie, le code fait des opérations et met Y à true. Et quand Y est à true, on sort(par exit for) de la boucle sur j.

  6. #6
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    Merci a tous les 2. C est bon pour moi.
    @Menhir : si tu peux m optimiser ce code je suis preneur 😁😁.
    En tout cas, il fonctionne tres bien pour le moment.

Discussions similaires

  1. [RegEx] Identifier les , entourées de nombre
    Par mikyfpc dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2009, 14h12
  2. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  3. Les nombres complexe et delphi
    Par wikers dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 11h47
  4. Réponses: 1
    Dernier message: 17/06/2005, 10h35

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