Excel 2010: une exception dans mes calculs

Fermé
Ju@nita Messages postés 149 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 8 août 2024 - Modifié par Ju@nita le 8/05/2014 à 19:42
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 8 juil. 2014 à 19:36
Bonjour,

J'ai une macro qui fait un tas de calcul et de tri pour faire ma facturation. J'ai par contre une seule exception qui n'embarque pas dans le pattern des formules.
Dans un fichier qui m'est fourni par quelqu'un, il y a une cellule qui contient 2 numéros de client. Le but est de séparer le montant à facturer entre ces 2 clients, qui eux, ont déjà des données plus haut dans la liste.
Donc, il faut chercher la cellule qui a les 2 numéros ensemble, prendre son montant, le diviser par 2 et aller le rajouter aux autres.
voici un exemple dans le fichier joint. Le premier tableau est ce qui m'est fourni, et celui dans la 2e feuille est le résultat donc j'ai besoin.

https://www.cjoint.com/?DEitz5l3U6G

J'essaie de me composer une formule juste pour ce cas, et je voudrais l'incorporer dans ma macro avant le bloc qui fait tout le reste du travail de tri et de calcul.
Informations importantes: cette exception est toujours présente et ce sont toujours les 2 mêmes clients. Ce qui peut changer, ce sont les montants et la ligne où se situent les numéros de clients. Je dois avoir une seule ligne par client. Je ne peux donc pas juste séparer les montants sur 2 nouvelles lignes sinon, j'aurais 2 lignes à facturer par client.

Merci pour votre aide.



A voir également:

4 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 8/05/2014 à 22:34
Bonsoir,

une façon :
Sub repartir()
    Dim c1 As Range, c2 As Range, client As Variant
    Dim cli As Long, ven As Long
    Application.ScreenUpdating = False
    Set c1 = [A:A].Find("-", LookIn:=xlValues, lookat:=xlPart)
    While Not c1 Is Nothing
        client = Split(c1, "-") ' recup n° clients
        For cli = 0 To UBound(client)
            Set c2 = [A:A].Find(client(cli), LookIn:=xlValues, lookat:=xlWhole)
            If c2 Is Nothing Then
                MsgBox " Erreur, client " & cli & " non trouvé"
            Else
                For ven = 0 To 1 ' repartir les ventes
                    c2.Offset(, ven + 1) = c2.Offset(, ven + 1) + c1.Offset(, ven + 1) / 2
                Next ven
            End If
        Next cli
        c1.EntireRow.Delete
        Set c1 = [A:A].Find("-", LookIn:=xlValues, lookat:=xlPart)
    Wend
End Sub 

Tu peux avoir plus de 2 clients séparés par des "-".
Bien que ça ne puisse pas arriver, si un des 2 clients n'existe pas j'alerte quand même. A toi de noter combien lui ajouter en créant la ligne.
https://www.cjoint.com/?DEiwGjREsLb

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Ju@nita Messages postés 149 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 8 août 2024
9 mai 2014 à 14:38
MA-LA-DE !
pensais même pas que ça se pouvait.
et ça marche du premier coup et j'ai réussi à l'incorporer dans ma macro et d'en changer un peu les paramètres car les info ne sont pas dans les mêmes colonnes que dans le fichier test.

un gros merci.
0
bonjour,

finalement, ça accroche à quelque part. Pour le fichier test, ça fonctionne très bien. Mais mon fichier de base est plus gros et les clients et leurs données ne sont pas dans les mêmes colonnes, ni les entêtes de colonne qui ne sont pas sur la ligne 1 non plus.

Comme je ne comprends vraiment rien à la macro proposée, j'ai de la difficulté à l'adapter. Pourriez-vous svp me dire quelles sont les paramètres que je dois changer, ou autrement dit, que veut dire chaque étape ?
voici la macro:
Sub repartir()
Dim c1 As Range, c2 As Range, client As Variant
Dim cli As Long, ven As Long
Application.ScreenUpdating = False
Set c1 = [A:A].Find("-", LookIn:=xlValues, lookat:=xlPart)
While Not c1 Is Nothing
client = Split(c1, "-") ' recup n° clients
For cli = 0 To UBound(client)
Set c2 = [A:A].Find(client(cli), LookIn:=xlValues, lookat:=xlWhole)
If c2 Is Nothing Then
MsgBox " Erreur, client " & cli & " non trouvé"
Else
For ven = 0 To 1 ' repartir les ventes
c2.Offset(, ven + 1) = c2.Offset(, ven + 1) + c1.Offset(, ven + 1) / (UBound(client) + 1)
Next ven
End If
Next cli
c1.EntireRow.Delete
Set c1 = [A:A].Find("-", LookIn:=xlValues, lookat:=xlPart)
Wend
End Sub

Déjà en partant, je ne sais pas ce que veut dire: Dim c1 as Range.

svp j'ai besoin d'aide.
merci.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
8 juil. 2014 à 16:34
Bonjour,

Dim sert à déclarer et typer les variables.
Pas obligatoire mais fortement recommandé.

2 mois après il faut tout reprendre à zéro. Tu aurais pu te réveiller plus tôt...
Il est où le fichier de travail qui correspond à la réalité ?

eric
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
8 juil. 2014 à 19:36
Comme j'ai été censuré et toi aussi : sert toi de la touche F1 et de google
eric
0