Boucles IF qui ne s'initialise pas MACRO VBA
Bonjour le fil
aujourd'hui je reviens vers vous car j'ai un petit problème , le but de mon travail est de créer une macro qui va générer des écritures comptables pour les importer dans un logiciel de comptabilité,
Avec l'aide d'un utilisateurs de ce forum j'ai réussi a créer cette macro , a l'intérieur de celle-ci j'essaye de crée une boucle IF pour afficher les numéro client selon leur mode de paiement mais je n'arrive pas a bien l'afficher dans ma cellule je vous met un fichier exemple avec une feuille nommé base et une feuille résultat, dans celle-ci j'y ai mis les différents numéro de compte concernant chaque mode de paiement et le tableau qui est initialisé grâce a ma macro .
si quelqu'un pourrait m'aider avec ma boucles ?
merci, a vous
Option Explicit
Public Sub TransformData()
Dim wb As Workbook, ws As Worksheet, ws2 As Worksheet
Dim Tbl As Variant, arr() As Variant
Dim i As Long, k As Long
Dim n As Double
Set wb = ActiveWorkbook
n = wb.Worksheets.Count
Set ws = wb.Worksheets("C")
Tbl = ws.Cells(1).CurrentRegion.Value2
Set ws2 = Worksheets.Add(after:=Worksheets(Worksheets.Count))
ws2.Name = "FiltreReglement" & n
For i = 2 To UBound(Tbl)
ReDim Preserve arr(6, k)
arr(0, k) = Tbl(i, 1)
arr(1, k) = "CA"
arr(2, k) = Left(Tbl(i, 3), 7)
If Tbl(i, 7) = "Reglement CARTES" Then
arr(2, k) = Replace("580000")
ElseIf Tbl(i, 7) = "Reglement CHEQUES" Then
arr(2, k) = Left(Tbl(i, 3) & "580100", 6)
ElseIf Tbl(i, 7) = "Reglement ESPECES" Then
arr(2, k) = Left(Tbl(i, 3) & "580200", 6)
ElseIf Tbl(i, 7) = "Reglement BON ACHAT" Then
arr(2, k) = Left(Tbl(i, 3) & "580400", 6)
ElseIf Tbl(i, 7) = "Reglement VIREMENTS" Then
arr(2, k) = Left(Tbl(i, 3) & "580500", 6)
ElseIf Tbl(i, 7) = "Reglement BEZAC KDO" Then
arr(2, k) = Left(Tbl(i, 3) & "580600", 6)
ElseIf Tbl(i, 7) = "Reglement VIREMENT TEEKERS" Then
arr(2, k) = Left(Tbl(i, 3) & "580800", 6)
ElseIf Tbl(i, 7) = "Reglement SUMUP" Then
arr(2, k) = Left(Tbl(i, 3) & "580900", 6)
End If
If Tbl(i, 5) = "D" Then
arr(3, k) = Tbl(i, 6)
Else
arr(4, k) = Tbl(i, 6)
End If
arr(5, k) = Tbl(i, 7)
k = k + 1
Next i
With ws2
.Cells(2, 1).Resize(, 6).Value = Array("date rgt", "code journal", "compte", "débit", "crédit", "Libellé")
.Cells(3, 1).Resize(k, 6).Value = Application.Transpose(arr)
End With
End Subbonjour,
reglement <> règlement, donc faire attention.
Select Case Tbl(i, 7)
Case "Reglement CARTES": arr(2, k) = "Replace(580000)" '?????
Case "Règlement CHEQUES": arr(2, k) = Left(Tbl(i, 3) & "580100", 6)
Case "Reglement ESPECES": arr(2, k) = Left(Tbl(i, 3) & "580200", 6)
Case "Reglement BON ACHAT": arr(2, k) = Left(Tbl(i, 3) & "580400", 6)
Case "Reglement VIREMENTS": arr(2, k) = Left(Tbl(i, 3) & "580500", 6)
Case "Reglement BEZAC KDO": arr(2, k) = Left(Tbl(i, 3) & "580600", 6)
Case "Règlement VIREMENT TEEKERS": arr(2, k) = Left(Tbl(i, 3) & "580800", 6)
Case "Reglement SUMUP": arr(2, k) = Left(Tbl(i, 3) & "580900", 6)
Case Else: arr(2, k) = "???? erreur"
End Selectcomme premières lignes de votre module (ajouter!)
Option Explicit
Option Compare Text '<<<<<<<<<<<<<<<<<<<<< IMPORTANT : MAJUSCULES ET MINISCULES !!!!!!!!!!!!!!!!!!!!!!!!!!!!!le reste, je ne l'ai pas vraiment regardé
bonjour d'abord merci beaucoup pour votre réponses rapide mais malheureusement ca ne fonctionne pas ca ne change pas les valeur selon le mode de paiement le code effectué je le met a la place de ma boucle c'est bien ca
Bonjour DragZ,
@BsAlv vous à donné votre fichier avec le code modifié, que vous faut-il de plus
bonjour @BrunoM45
merci bah le problème c'est que le code que le monsieur ma donné a le même effet que ma boucle IF ca ne la prend pas en compte , et depuis tout a l'heure j'essaye de regarder même les majuscules mais ca ne change rien et je ne vois pas pourquoi même sur mon fichier modifié
bonjour,
cette question est une continuation de hier. Il y avait 2 solutions possible, la mienne avec un array et une avec 2 arrays et une transposition.
Je supposais que, comme vous avez choici pour la derniere option, que vous aviez compris le truc, apparament non.
Il faut prendre un papier et notez les paramètres et inspectez ce qui se passe ... .
re
je me suis mis a utilisé votre code(celui d'y hier j'y ai intégrer le SELECT Case mais ca ne fonctionne je comprend votre code mais je manque de logique + je suis debutant en VBA je vais essayer de trouver l'erreur que j'ai faites si je n'y arrive pas je reviens vers ou si jamais
For i = 1 To UBound(Tbl) - 1 'boucle les données
'Tbl(i, 3) = "'" & Left(Tbl(i, 3) & "00000", 6) 'code journalier
Select Case Tbl(i, 7)
Case "Reglement CARTES": Tbl(i, 3) = Left(Tbl(i, 3) & "580000", 6)
Case "Reglement CHEQUES": Tbl(i, 3) = Tbl(i, 3) & "580100"
Case "Reglement ESPECES": Tbl(i, 3) = Tbl(i, 3) & "580200"
Case "Reglement BON ACHAT": Tbl(i, 3) = Tbl(i, 3) & "580400"
Case "Reglement VIREMENTS": Tbl(i, 3) = Tbl(i, 3) & "580500"
Case "Reglement BEZAC KDO": Tbl(i, 3) = Tbl(i, 3) & "580600"
Case "Reglement VIREMENT TEEKERS": Tbl(i, 3) = Tbl(i, 3) & "580800"
Case "Reglement SUMUP": Tbl(i, 3) = Tbl(i, 3) & "580900"
Case Else: Tbl(i, 3) = "???? erreur"
End Select
Re je n'y arrive toujours pas a l'afficher correctement car je n'arrive pas a modifier le LEFT en gros la première ligne règlement BON ACHAT il faut qu'il y aie compte 4110000 et la deuxième ligne 580400 mais la non ca m'affiche deux valeur dans une seule (je sais que ces a cause du & ) mais je ne saurais quoi mettre
re,
j'ai essayé d'expliquer toutes les lignes aussi bien que possible. La colonne C, je n'ai pas compris le résultat voulu.
Vous lisez les données dans un array Tbl, avec ces dimensions, on crée un 2ième array Arr, mais comme la première ligne de Tbl contient des entêtes, il y a un écart d'une ligne.
En ajoutant un ' en face d'un numéro, Ecxel interprêt ce numéro comme texte et n'utilisera pas le format scientifique (x.xExx)
re ,
Tout d'abord merci pour votre réponse et vos explications , je comprend bien le code grâce a vous et pour vous expliquer ce que je veux dans la COLONNE C c'est que selon ce qu'il y a marque dans la colonne F "Règlements" ca m'affiche dans chaque deuxième ligne de la colonne C le numéro de compte correspondant
Est ce que vous comprenez ? d'où l'utilisation de ma boucles .
bonjour,
mieux avec ceci ?
If UCase(Tbl(i + 1, 5)) = "D" Then ' 2ième ligne donc les "D"
Select Case Tbl(i + 1, 7) 'la libelle
Case "Reglement CARTES": Arr(i, 3) = "'580000" 'remarque le ' comme premier charactère
Case "Règlement CHEQUES": Arr(i, 3) = "'580100"
Case "Reglement ESPECES": Arr(i, 3) = "'580200"
Case "Reglement BON ACHAT": Arr(i, 3) = "'580400"
Case "Reglement VIREMENTS": Arr(i, 3) = "'580500"
Case "Reglement BEZAC KDO": Arr(i, 3) = "'580600"
Case "Règlement VIREMENT TEEKERS": Arr(i, 3) = "'580800"
Case "Reglement SUMUP": Arr(i, 3) = "580900"
Case Else: Arr(i, 3) = "???? erreur"
End Select
Else
Arr(i, 3) = "'" & Tbl(i + 1, 3)
End If
Ca fonctionne merci Beaucoup monsieur Vous m'avez été d'une grande aide