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 :

Code VBA boucle + condition SI


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Secrétaire

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut Code VBA boucle + condition SI
    Bonjour,

    Je suis totalement novice sur le sujet. Je vous remercie d'avance pour votre patience et compréhension à mon égard.

    Je commence à apprendre à créer un code grâce à l'enregistreur MACRO mais je bute sur une boucle et une condition.

    Je vous explique. Je travaille sur le stock de ma concession. J'ai un fichier qui reprend tout le stock et je fais une extraction de données afin de mettre les nouvelles lignes de stock dans le mien. Pour cela je fais une macro dans un fichier "Préparation" je remets dans l'ordre et en forme les cellules. J'ai réussi grâce à l'enregistreur. Le code ne me parait pas optimum mais il fonctionne.

    2ème phase (celle à problème) :

    Je compare 2 colonnes et en fonction de sa valeur, il y a une action différente.

    Les titres sont sur la ligne 1.
    Les données à partir de la ligne 2.
    Je compare chaque cellule A et U jusqu'à ce qu'elles soit vides (le nombre de ces colonnes correspond à un numéro de véhicule).

    =SI(A2-U2=0;
    *c'est OK, et on passe à la ligne suivante pour la formule et on affiche le résultat, colonne X
    *c'est NOK :
    Si le résultat est positif :
    - soit c'est une sortie de stock (un client attitré) et donc il faut descendre la plage A à T (en commençant par la ligne active où se trouve le problème) jusqu'à ce que la formule devienne <> du positif (en règle générale dès que ça redevient 0 -> même n° de voiture)
    - soit c'est une entrée de stock et ça reste positif (en règle général comme c'est par ordre du + petit au + grand) c'est à la fin

    De cette façon là, en mettant un filtre par après je pourrais copier le résultat de la plage A à T, les nouvelles entrées, et les coller dans mon fichier de stock (également par macro -> 3ème phase).
    Je pourrais également trouver mes clients attitrés de la journée pour renseigner code vendeur et informations du clients par après.

    Je ne sais vraiment pas si j'ai été claire...

    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Pas sûr d'avoir tout bien compris, mais voici une première proposition qui peut vous aider et vous mettre sur la voie, il vous suffira de l'adapter selon vos besoins.

    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
    Sub Controle()
        'Déclaration des variables
        Dim DerLig As Long, Col As Long, i As Long
        Application.ScreenUpdating = False 'évite le raffraichissement de l'écran et augmente la vitesse d'exécution
        DerLig = Cells(Rows.Count, "A").End(xlUp).Row 'recherche de la dernière ligne
        Col = 21 'Colonne "U"
        For i = 2 To DerLig 'de la ligne 2 jusqu'à la dernière
    Test:
            If Cells(i, "A") - Cells(i, Col) = 0 Then 'on recherche l'égalité entre les cellules des colonnes A et U
                Cells(i, "X") = "égalité trouvée avec la colonne " & Col 'si égalité, alors on met un commentaire en colonne "X"
                Col = 21 'on fixe la dernière colonne  à la colonne "U"
            ElseIf Cells(i, "A") - Cells(i, Col) <> 0 Then 'si inégalité ente A et U
                'on remonte de colonne en colonne
                Col = Col - 1
                If Col = 1 Then 'si l'égalité n'est jamais atteinte, alors on sort du programme
                    Cells(i, "X") = "égalité non trouvée" 'si pas d'égalité, alors on met un commentaire en colonne "X"
                    Exit Sub
                End If
                GoTo Test 'on refait le test
            End If
        Next i
    End Sub

    Cdlt

  3. #3
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Secrétaire

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut
    Bonjour ARTURO83,

    J'ai mis votre code (sans rien changer) pour tester et il s'est arrêté à la 3ème ligne lorsque le résultat n'était pas 0, ->
    Erreur d'exécution 13' Incompatibilité de type
    (il m'a mis la ligne If Cells(i, "A") - Cells(i, Col) = 0 Thenon recherche l'égalité entre les cellules des colonnes A et U" en jaune :

    Voici ce que j'ai après avoir lancé la macro :

    Colonne A Colonne U Colonne X
    N° de CAR Dialog Diff.
    527518 527518 égalité trouvée avec la colonne 21
    559855 559855 égalité trouvée avec la colonne 21
    568940 566713
    571806 568940
    610120

    Dans mon exemple ci-dessus, il faudrait que pour le 568940, on descende la plage (colonne A à T) correspondante, 1 ligne plus bas jusqu'à ce qu'il trouve le 568940 de la colonne U. Dès que c'est fait, mettre valeur "0" dans la colonne X (valeur de la formule A4-U4).
    Pour le 566713, il n'y aura rien dans la colonne A (le résultat de la formule colonne X sera donc un montant négatif (valeur de la formule A3-U3= "-566713") -> sortie de stock) mais ça ne doit pas empêcher le code de s'appliquer jusqu'à la fin de la colonne A.
    Et pour le 610120, il n'y aura rien dans la colonne U, (le résultat de la formule colonne X sera donc un montant positif (valeur de la formule A6-U6= "610120") -> entrée de stock ) mais ça ne doit pas non plus empêcher le code de s'appliquer jusqu'à la fin de la colonne A.

    Je ne sais pas si c'est plus clair, c'est pas évident d'expliquer... vraiment désolée...

    PS: le but est d'avoir dans la colonne X des valeurs négatives (sortie de stock), positives (entrée de stock) ou 0 (le stock) afin de pouvoir filtrer par après les résultats, et, surtout, copier/coller les colonnes A à U dont le résultat est positif dans un autre fichier.

    Un grand merci pour votre aide !

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    C'est franchement pas clair du tout, faites des copies d'écran:
    - 1 copie de ce que vous avez
    - 1 copie du résultat attendu

    Pour déposer les copies d'écran, cliquez sur l'icône suivante
    Pièce jointe 517218

    Cdlt

Discussions similaires

  1. Réponses: 14
    Dernier message: 04/04/2018, 12h18
  2. [XL-2007] VBA - Boucles conditions avec Find et FindNext qui posent problèmes
    Par Vincenzop22 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 09/05/2017, 19h59
  3. [XL-2010] Code VBA à une condition
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2012, 09h05
  4. Optimisation de code imbrication boucle+condition
    Par kouesta dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2008, 09h08
  5. [VBA-A] Condition pour boucle if
    Par ptitegrenouille dans le forum Access
    Réponses: 6
    Dernier message: 23/11/2005, 09h33

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