Correction code VBA

Bjr,

Quelqu’un pourra m’aider à corriger le code VBA de mon fichier excel ci- joint ?

Mdp : Siva

Macro : « CopySales »

Ma feuille « 7SW » comporte le suivie des mouvements de mon stock magasin et la colonne AW à partir le colonne 4 représente la quantité de vente de chaque article.

L’exécution de la macro « CopySales » copie les articles qui ont fait l’objet d’une vente dans la colonne AW de la feuille « 7SW », puis colle dans la feuille « 7S-Sales ».

Correction demandée :

1. L’exécution de la macro doit s’arrêter en affichant un message d’erreur si la colonne AW de la feuille « 7SW » comporte des valeurs négatives ou une valeur décimale (Dans mon exemple la cellule AW7 a une valeur « -1620 » et la cellule AW12 a une valeur « 191.3 ». « Le point » du 191.3 représente un chiffre décimal en anglais).

MsgBox « The sale has a negative value (or) a decimal value !!!».

2. S’il n’y a pas de valeur négative ou de valeur décimal, le collage doit s’effectuer dans la feuille « 7S-Sales » uniquement les articles dont la quantité de vente est différent de « 0 ». Erreur rencontrée actuellement dans la colonne B de ma feuille « 7S-Sales » Item-4 a une valeur « -1620 », Item-6 a une valeur « 0 » et Item-9 a une valeur « 191.3 ».

Petite précision, le format de la colonne AW de ma feuille « 7SW » est en « [=0]"-";General ».

Merci à vous si vous avez du temps à m’accorder.

Désolé la taille de mon fichier est 14,560 Ko. Y-a-t-il un moyen de joindre mon fichier ?

si non le code est :

Sub CopySales()

    rep = MsgBox("Are you sure you want to export the data from 7SW to 7S-Sales ?", 20)
    If rep = 7 Then
        Exit Sub
    End If
    Sheets("7SW").Unprotect "Siva"
    Sheets("7S-Sales").Unprotect "Siva"
    Set fw = Sheets("7SW")
    Set fs = Sheets("7S-Sales")

    Set plage = Union(fs.Range("A1").CurrentRegion.Offset(1, 0), fs.Range("F1").CurrentRegion.Offset(1, 0))
    plage.Interior.Color = xlNone
    plage.ClearContents

    derln = Application.Max(4, fw.Range("C" & 65536).End(xlUp).Row)
    For ln = 4 To derln
        If IsNumeric(fw.Range("AW" & ln)) Then
            lgn = fs.Range("A" & 65536).End(xlUp)(2).Row
            fs.Cells(lgn, 1) = fw.Cells(ln, 3)
            fs.Cells(lgn, 2) = fw.Cells(ln, 49)
            fs.Cells(lgn, 3) = fw.Cells(ln, 7)
            fs.Cells(lgn, 4).FormulaR1C1 = "=RC[-2]*RC[-1]"
            fs.Cells(lgn, 6) = fw.Cells(4, 51)
            fs.Cells(lgn, 7) = fw.Cells(4, 52)
            fs.Cells(lgn, 8) = fw.Cells(4, 53)
            fs.Cells(lgn, 9) = fw.Cells(4, 54)
            fs.Cells(lgn, 10) = fw.Cells(4, 55)
            fs.Cells(lgn, 11) = fw.Cells(4, 56)
        End If
    Next ln
    fs.Activate
    Range("D2").Select
    Sheets("7SW").Protect "Siva"
    Sheets("7S-Sales").Cells.Locked = True
    Sheets("7S-Sales").Protect "Siva"

End Sub

Bonjour,

Pourquoi ne pas ajouter une boucle qui vérifie tes conditions (négatif et décimal) ?

Bjr,

je suis un débutant en VBA. Je ne maîtrise pas bien. Ce que je sais faire c'est créer une macro par l'enregistrement.

Comment est arrivée ta boucle For... Next ?

Bjr

Ce n'est pas moi qui l'a créer

OK.

Donc plusieurs solutions : voir avec celui qui t'a créé ton code, de rajouter tes conditions ou sinon, commencer à apprendre le VBA et voir dans la section du site "cours vba", la partie sur les boucles.

Essayer par soi-même est la meilleure façon d'apprendre .

Bien entendu, on peut ensuite bloquer sur quelque chose.

Mais là avant même de donner une solution toute prête, il faut que toi-même tu fasses la démarches d'apprendre, ou tout au moins comprendre le vba, et notamment le code que tu nous a collé.

Merci, c'est très gentil de tes commentaires. Si j'arrive à résoudre moi même, je ne serrais pas là sur ce forum en train de chercher de l'aide.

J'entends bien.

C'est juste que je te parle de boucle, tu me réponds que tu n'y connais rien, or dans ton code que quelqu'un t'a fait il y a une boucle (la partie entre for et next).

Je veux juste dire que si tu ne comprends pas le code que tu nous présentes et que l'on t'apporte un code tout prêt, quel est le bénéfice pour toi ? Aucun, la prochaine fois que tu voudras faire quelque chose sous Excel tu seras bloqué.

Le but ici est d'aider, et personnellement je suis prêt à t'aider du mieux que je peux, ce n'est pas le problème.

Donc ma question : comprends-tu ce que fais ton code ?

Je suis tout à fait d'accord avec toi. Sur ce code je comprends certaines lignes. Peut tu me commenter le début du code sur le chiffre 20 et 7

rep = MsgBox("Are you sure you want to export the data from 7SW to 7S-Sales ?", 20)
    If rep =7 Then
        Exit Sub
    End If
Siva a écrit :

Je suis tout à fait d'accord avec toi. Sur ce code je comprends certaines lignes. Peut tu me commenter le début du code sur le chiffre 20 et 7

rep = MsgBox("Are you sure you want to export the data from 7SW to 7S-Sales ?", 20)
    If rep =7 Then
        Exit Sub
    End If

Au début de ta macro, une boîte de dialogue apparaît (msgbox) demandant si on veut vraiment exporter les données

Le 20 pour moi correspondrait à la "croix rouge" d'Excel.

Après, je pense la valeur 7 est égal au bouton "non" de la boîte de dialogue.

Donc si rep(=le clique) = non then(alors)

exit sub(on sort de procédure et la macro s'arrête)

sinon cela induit que l'on poursuit la procédure

Ok, C'est compris cette première partie.

Où et comment j'insère une boucle qui vérifie tes conditions (négatif et décimal) et prendre en compte les valeurs différents de 0.

Siva a écrit :

Ok, C'est compris cette première partie.

Où et comment j'insère une boucle qui vérifie tes conditions (négatif et décimal) et prendre en compte les valeurs différents de 0.

Il faut que ta boucle soit positionnée avant ton autre boucle qui sert à copier tes données. Schématiquement :

MsgBox pour vérifier si on veut vraiment copier les données (existant)

Boucle pour contrôler que tes données soient au bon format avec MsgBox à la fin si une donnée incorrecte (à créer)

Boucle pour copier tes données (existant)

Bjr papysg,

merci pour ton aide. Je suis une formation VBA, j'espère que j'arriverai à résoudre à l'issue de la formation. Si j'ai un souci je reviendrai vers toi.

cdl

Super !

Bon courage à toi

Rechercher des sujets similaires à "correction code vba"