Conditions a plusieurs valeurs sur même colonne
Résoluf894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour le forum
j'ai déjà effectué une demande sur https://forum.excel-pratique.com/exc...detecte-176253
Aujourd'hui ca fait 2 semaine que je suis sur une macro qu'on me demande a chaque fois des modifications !
En faite j'ai un export de données a intégrer dans un logiciel comptable .
MAINTENANT je dois faire une macro que Selon le compte client détecté "706400" qui correspond a la TVA 10% et "445720" son HT 10% et
" 706500" la TVA 20 % et son HT 20% "445722"qui se présente comme ceci sur tous mes dossiers
Sur ces lignes les deux comptes sont présents avec une dernière ligne "le nom du client"
et en gros ma macro doit détecté si un compte Tva est détecté (ou les deux ) il faut afficher le mot TVA 10% ou TVA 20% après le nom du client et si il y a les deux Cela doit dédoublé la ligne du compte client comme ci-dessous
par contre quand cela dédouble la ligne pour la Tva 10%
Ex: on fait la somme des comptes correspondant (706400 + 445720) en gros (3908.13 + 390.78 = 4298.91) pour la tva 10 %et pour les 20% (706500 + 445722) qui est (142.58 + 28.51 = 171.09)
mais des fois il se pourrait que une seul compte apparait comme ci-dessous et cela doit affiché Tva 20% après le nom de facture mais sans dédoublé de ligne
ou pour les 10%
Voici le code d'un des collègues du forum qui ma énormément aidé que j'essaye d'adapter mais sans plus et un fichier avec des infos anonymes crée de toute pièces
Sub MacroInsertion() Dim i As Integer, J As Integer ' déclarer les variables Application.ScreenUpdating = False ' geler temporairement l'affichage pour augmenter la rapidité d'exécution dlig = Cells(Rows.Count, "A").End(xlUp).Row ' trouver la dernière ligne du tableau (basé sur la colonne A) For i = 2 To dlig ' boucler de la 1re ligne de données jusqu'à la dernière If Cells(i, "C") = "445720" Then ' si le numéro est trouvé en colonne C ' boucle pour trouver le numéro commençant par 35 sur les lignes plus basses For J = i To dlig If Cells(J, "C") Like "0*" Then ' si trouvé en colonne C ' teste si les lignes (valeur de J et J+1) commencent par 35 ' cela indiquerait que le traitement a déjà été fait, donc mettre fin au traitement If Cells(J, "C").Value = Cells(J + 1, "C").Value Then Exit For ' sinon, insérer une ligne Rows(J).Insert ' Copier la ligne en dessous (J+1) sur la ligne (valeur de J) Range("A" & J & ":G" & J).Value = Range("A" & J + 1 & ":G" & J + 1).Value ' remplacer le 20% par 10% dans le libellé de la colonne F Cells(J, "F") = Replace(Cells(J, "F"), "20%", "10%") ' additionner E 4 lignes au-dessus (7064400) avec E 2 lignes au-dessus (445720) ' puis multiplier par 0.1 (10%), écrire le résultat en E de 10% Cells(J, "D").Value = (CDbl(Cells(J - 4, "E").Value + CDbl(Cells(J - 2, "E").Value))) ' additionner E 3 lignes au-dessus (7064500) avec E 1 ligne au-dessus (445722) ' puis multiplier par 0.2 (20%), écrire le résultat en E de 20% Cells(J + 1, "D").Value = (CDbl(Cells(J - 3, "E").Value + CDbl(Cells(J - 1, "E").Value))) ' 1 ligne a été insérée, donc la dernière ligne a changé, on incrémente dlig = dlig + 1 ' on sort de la 2e boucle pour retourner à la 1re afin de continuer sur les lignes suivantes Exit For End If ' mettre fin à la 2e condition Next J ' aller à la valeur du J suivante End If ' mettre fin à la 1re condition Next i ' aller à la valeur du i suivant pour continuer sur les lignes suivantes End Sub ' terminer la procédure
VOici un fichier d'ex sur ce site comme j'ai deja demandé une solution : https://forum.excel-pratique.com/excel/ajouter-des-lignes-si-compte-client-detecte-176253
Windows / Chrome 105.0.0.0
- Conditions a plusieurs valeurs sur même colonne
- Déplacer colonne excel - Guide
- Trier colonne excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
6 réponses
Bonjour,
Clement, Sophie et froid sont ou a l'origine vu que vous parlez de dossiers?
A quoi ressemble la feuille de depart avant l'insertion de ligne car sur vore premiere image y a 0Clement, un cumul et pas de tva inscrite avant derniere colonne?
Bonjour,
Le code est pret. Je regarde pour le traitement d'erreur et la relance sur erreur de facon a ne pas rajouter des lignes si deja fait ou il vous faudra faire une copie avant de lancer
Re,
si vous pouviez m'expliquer comment vous avez fait :
Ben comme ca: https://www.cjoint.com/c/LJfoBRNpGjg
Y a pas la partie relance sur erreur
Pour lancer le code: crtl+shift+d
Si vous transposez les procedures dans un autre fichier, pensez a adapter le nom de feuille dans le Module Detail
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
merci pour votre réponse :)
voici mon fichier de base il se présente comme ceci