VBA reconnaissance partie de texte (chaine) pour en tirer un calcul
Bonjour le forum,
Je viens vers vous car je souhaiterai savoir si il était possible d'avoir une solution VBA ONLY sur cette problématique (pas possibilité d'utiliser Power query malheureusement).
Il s'agit ici de pouvoir réaliser plusieurs action à partir d'une reconnaissance de texte; c'est-à-dire comparer la liste en colonne D à chaque donnée des colonnes G de chaque mois.
Je souhaiterai si possible par étape et dans les cellules correspondantes :
| 1 - | E14 | TROUVE "CASEIPIPE" dans plage '04'!G2:G12 | -> | si trouvé alors||
| 2 - | E14 | EFFECTUE la somme ongl.04 de H si "CASEIPIPE" et si "601" ;idem pour 912 | -> sinon 0 | ||
| 3 - | B14 | TROUVE si "CASEIPIPE" dans plage '04'!G2:G12 | -> | si trouvé alors | |
| 4 - | B14 | EFECTUE la recherchev pour retrouver le Creditor | -> sinon 0 | ||
| 5 - | C14 | TROUVE si "CASEIPIPE" dans plage '04'!G2:G12 | -> | si trouvé alors | |
| 6 - | C14 | EFECTUE la recherchev pour retrouver le GL account | -> sinon 0 | ||
La ligne 14 est donc un exemple avec les résultats attendus.
Si quelqu'un sait je prend ^^ (fichier en copie)
merci,
Salut lolopixx,
premier jet...
J'imagine que ton tableau "SYNT" réel est mieux positionné et ressemble plutôt à ce que j'en ai fait. Á préciser !
La macro démarre sur un double-clic en 'SYNT' [D3]...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, tData
'
If Not Intersect(Target, Range("D3")) Is Nothing Then
Cancel = True
Range("E4").Resize(Range("D" & Rows.Count).End(xlUp).Row, Cells(3, Columns.Count).End(xlToLeft).Column).Value = ""
Range("B4").Resize(Range("D" & Rows.Count).End(xlUp).Row, 2).Value = ""
tTab = Range("B2").Resize(Range("D" & Rows.Count).End(xlUp).Row - 1, Cells(3, Columns.Count).End(xlToLeft).Column + 1)
For x = 3 To UBound(tTab, 1)
For y = 2 To Sheets.Count
iCol = 2 + (CInt(Sheets(y).Name) * 2)
tData = Sheets(y).Range("A1").Resize _
(Sheets(y).Range("D" & Rows.Count).End(xlUp).Row, _
Sheets(y).Cells(1, Columns.Count).End(xlToLeft).Column).Value
For Z = 2 To UBound(tData, 1)
If InStr(tData(Z, 7), tTab(x, 3)) > 0 Then
If CLng(tData(Z, 4)) = CLng(tTab(2, iCol)) Then tTab(x, iCol) = CDbl(tTab(x, iCol)) + CDbl(tData(Z, 8))
If CLng(tData(Z, 4)) = CLng(tTab(2, iCol + 1)) Then tTab(x, iCol + 1) = CDbl(tTab(x, iCol + 1)) + CDbl(tData(Z, 8))
If tData(Z, 1) <> "" Then tTab(x, 1) = tData(Z, 1)
If tData(Z, 3) <> "" Then tTab(x, 2) = tData(Z, 3)
End If
Next
Next
Next
Range("B2").Resize(Range("D" & Rows.Count).End(xlUp).Row - 1, Cells(3, Columns.Count).End(xlToLeft).Column + 1).Value = tTab
End If
'
End Sub
A+
Bonjour curulis57,
Ton code fonctionne (je préfère le dire même si cela tombe sous le sens) ^^ , merci!!
Imaginons que l'onglet 04, 05 et 06 se trouve dans un autre classeur, saurais-tu comment intégrer un chemin dans ton code ?
Je te pose la question car je ne parviens pas à le comprendre ce code
Cela fait combien d'année que tu pratiques le VBA ?! juste pour savoir
merci à toi en tout cas ;)