vba index equiv

matmi

XLDnaute Nouveau
bonjour à tous,

J'ai un problème de vba.
Je suis en train de faire une macro pour pouvoir passer des écritures comptables à partir d'éléments donnés par mon client.
Mon client m'envoie ses infos dans l'onglet factures d'achats.


Mon fichier que je dois créer est l'onglet "import" (j'ai mis les formules et les infos dont je dois disposer une fois la macro lancée)

J'essaie d'obtenir la même chose dans l'onglet "test" mais en executant ma macro
import_data.

Mon problème :
Je dois faire ressortir un numéro de compte à partir de l'élément "nature de la charge" dans le sheet factures d'achats.
En gros il faut que pour la variable compte1, il aille rechercher dans data le numéro de compte correspondant à la nature de la charge.

Je n'arrive pas car le numéro de compte se situe à gauche de la nature.

En gros il faudrait faire un recherchev mais vers la gauche.

Merci de me dire si vous comprenez rien :)

Merci pour votre aide.

Fichier excel en PJ

MaTmI
 

Pièces jointes

  • test.zip
    18.8 KB · Affichages: 53
  • test.zip
    18.8 KB · Affichages: 52
  • test.zip
    18.8 KB · Affichages: 53

kjin

XLDnaute Barbatruc
Re : vba index equiv

Bonsoir,
Entre nous la feuille Data....
On ne comprend pas vraiment quel numéro il faut renvoyer !
Tu utilises la fonction Find, pourquoi ne pas continuer de la même manière ?
Je te mets 2 possibilités
Code:
Sub import_data()
Dim T, dl As Long, i As Long, x, r As Range
With Sheets("Factures achats")
    T = .Range("A4:H" & .Range("A65000").End(xlUp).Row).Value 'on remplit un Tableau avec la facture
End With
With Sheets("test")
    dl = .Range("A65000").End(xlUp).Row + 1
    For i = LBound(T) To UBound(T)
        .Cells(dl, 1) = CDate(T(i, 1))
        .Cells(dl, 2) = "HA"
        x = Application.Match(T(i, 2), Sheets("Data").Columns(6), 0)
        If Not IsError(x) Then
            .Cells(dl, 3) = Sheets("Data").Cells(x, 5)
        End If
'        ou
'        Set r = Sheets("Data").Columns(6).Find(T(i, 2))
'        If Not r Is Nothing Then
'            .Cells(dl, 3) = r.Offset(, -1)
'        End If
        'suite ...
        
    dl = dl + 1
    Next
End With

End Sub
A+
kjin
 

matmi

XLDnaute Nouveau
Re : vba index equiv

C'est cela que je veux.

Le truc c'est que je n'arrive pas à l'integrer dans mon code.
En sachant que je créé un tableau avec 3 lignes dans l'onglet "test" par facture.
En fait il faut que la variable compte1 prenne la valeur trouvée par le find.

Je ne sais pas si tu vois ce que je veux dire ?
 

matmi

XLDnaute Nouveau
Re : vba index equiv

en fait j'ai des soucis car la recherche se fait sur un range et ma variable compte1 que je dois affiché est un long.

Bref j'ai essayé toute la journée mais je sèche.

Désolé mais je suis débutant en vba.

Merci pour votre aide

MaTmI
 

kjin

XLDnaute Barbatruc
Re : vba index equiv

Bonjour,
C'est bien gentil, mais tu fournis 2 feuilles différentes "test" et "import" dont les résultats sont différents. Pourrais tu faire passer un exemple clair et unique du résultat attendu !
En outre, comme déjà dit, tu ne peux vraiment pas organiser la feuille Data de manière rationnelle ?
A+
kjin
 

matmi

XLDnaute Nouveau
Re : vba index equiv

Bonjour Kjin,

La feuille import est juste le rendu final que je souhaite. (in finé elle sera supprimée)
La feuille test est la feuille du rendu en exécutant la macro (qui pour l'instant n'est pas vraiment ce que je désire, notamment au niveau de la gestion des numéros de compte)
Il faut qu'une fois la macro exécutée : les données de la feuille test correspondent à la feuille import.
Concernant mon onglet data, je suis concient que l'organisation est vraiment pas bien.
Le problème est que je ne peux rien y toucher car mon client travaille comme cela... et que tout est déjà figé chez lui.

J'ai remis mon fichier test avec des commentaires.
En ésperant être plus clair.

Merci encore de consacrer du temps à mon problème.

Promis si j'ai une augmentation car j'apporte une valeur ajoutée à mon boulot, je partage :)
 

Pièces jointes

  • test.zip
    17.5 KB · Affichages: 59
  • test.zip
    17.5 KB · Affichages: 59
  • test.zip
    17.5 KB · Affichages: 57

kjin

XLDnaute Barbatruc
Re : vba index equiv

Re,
Code:
Sub import_data()
Dim T, dl As Long, i As Long, x, y, s As Double
With Sheets("Factures achats")
    T = .Range("A4:H" & .Range("A65000").End(xlUp).Row).Value 'on remplit un Tableau avec la facture
End With
With Sheets("test")
    dl = .Range("A65000").End(xlUp).Row
    For i = LBound(T) To UBound(T)
        x = Application.Match(T(i, 2), Sheets("Data").Columns(6), 0)
        y = Application.Match(T(i, 4), Sheets("Data").Columns(9), 0)
        If Not IsError(x) And Not IsError(y) Then
            dl = dl + 1
            .Cells(dl, 1) = CDate(T(i, 1))
            .Cells(dl, 3) = Sheets("Data").Cells(x, 5)
            .Cells(dl, 6) = T(i, 7)
            .Cells(dl, 8) = T(i, 5)
            s = T(i, 7)
            If Not IsEmpty(T(i, 8)) Then
                dl = dl + 1
                .Cells(dl, 1) = CDate(T(i, 1))
                .Cells(dl, 3) = 44566000
                .Cells(dl, 6) = T(i, 8)
                .Cells(dl, 8) = T(i, 5)
                s = s + T(i, 8)
            End If
            dl = dl + 1
            .Cells(dl, 1) = CDate(T(i, 1))
            .Cells(dl, 3) = 40100000
            .Cells(dl, 4) = Sheets("Data").Cells(y, 8)
            .Cells(dl, 4).NumberFormat = "00000000"
            .Cells(dl, 7) = s
            .Cells(dl, 8) = T(i, 5)
        End If
    Next
End With

End Sub
A+
kjin
 

matmi

XLDnaute Nouveau
Re : vba index equiv

Un grand merci à toi, c'est exactement ce que je voulai.
Merci d'avoir concacré du tout et surtout de t'être adapter à mes contraintes.

A bientôt.

MaTmI

edit : Peut on mettre un [résolu] devant le sujet du thread ?
 
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 Vba Index Equiv
Réponses
4
Affichages
309

Statistiques des forums

Discussions
312 492
Messages
2 088 936
Membres
103 987
dernier inscrit
Doctami