Excel 2010: une exception dans mes calculs
Ju@nita
Messages postés
163
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Excel 2010: une exception dans mes calculs
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Clé activation office 2010 gratuit - Télécharger - Sécurité
- Si ou excel - Guide
4 réponses
Bonsoir,
une façon :
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
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
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.
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.
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.
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.