Problème incrément VBA

Bonjour,

Je rencontre un problème dans mon code

Après l'ouverture de mon fichier, je souhaite coller des données de celui-ci dans mon classeur.

Mais lorsque je lance le code, la première valeur trouvé se colle à la ligne 22 et non 2. Puis le code s'arrête au premier IF, jai une erreur d'incompatibilité du type.

Avez-vous une solution ?

Mon code : voir photo pour l'indentation

Sub test()
Dim compteur3 As Integer, i as integer, j as integer
Dim wb As Workbook, wb3 As Workbook
Dim CHEMIN As String

'Définit le répertoire contenant les fichiers
CHEMIN = ActiveWorkbook.Path & "\FAL23\"

Set wb = ActiveWorkbook

'Chemin d'accès des fichiers

CB = CHEMIN & "TC-APS-T059S13_CB.xlsx"

Set wb3 = Workbooks.Open(CB)

compteur3 = wb3.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
i = 2
j = 2
While j <> compteur3
    If wb3.Sheets(1).Range("L2:L" & j).Value = "DISTRIBUTION" Or wb3.Sheets(1).Range("L2:L" & j).Value = "ADDUCTION" Then
        If wb3.Sheets(1).Range("E2:E" & j).Value = "AERIEN" Then
            wb.Sheets(1).Range("A2" & i).Value = wb3.Sheets(1).Range("E2:E" & j).Value
            wb.Sheets(1).Range("B2" & i).Value = wb3.Sheets(1).Range("L2:L" & j).Value
            wb.Sheets(1).Range("C2" & i).Value = wb3.Sheets(1).Range("C2:C" & j).Value
            wb.Sheets(1).Range("D2" & i).Value = wb3.Sheets(1).Range("O2:O" & j).Value
        i = i + 1
        ElseIf wb3.Sheets(1).Range("E2:E" & j).Value = "SOUTERRAIN" Then
            wb.Sheets(1).Range("A2" & i).Value = wb3.Sheets(1).Range("E2:E" & j).Value
            wb.Sheets(1).Range("B2" & i).Value = wb3.Sheets(1).Range("L2:L" & j).Value
            wb.Sheets(1).Range("C2" & i).Value = wb3.Sheets(1).Range("C2:C" & j).Value
            wb.Sheets(1).Range("D2" & i).Value = wb3.Sheets(1).Range("O2:O" & j).Value
        i = i + 1
        End If
    End If

j = j + 1
Wend

End Sub

Merci d'avance !!

Bonjour,

la première valeur trouvé se colle à la ligne 22 et non 2.

avec

wb.Sheets(1).Range("A2" & i).Value = wb3.Sheets(1).Range("E2:E" & j).Value

quand la variable i = 2 , ça donne :

wb.Sheets(1).Range("A22").Value = wb3.Sheets(1).Range("E2:E" & j).Value

il faudrait : Range("A" & i).Value

au premier IF, jai une erreur d'incompatibilité du type.

If wb3.Sheets(1).Range("L2:L" & j).Value = "DISTRIBUTION" .../...

quand j vaut 2 , ça nous donne If wb3.Sheets(1).Range("L2:L2" ).Value soit range("L2") donc on peut tester le contenu de catte plage ouisque ce n'est qu'une cellule

quand j vaut 3 ça nous donne If wb3.Sheets(1).Range("L2:L3" ).Value; et on ne peut pas tester la valeur d'une plage de cette manière.

Par ailleurs, il y aura sans doute un problème avec ( et les autres lignes du même type)

 wb.Sheets(1).Range("A2" & i).Value = wb3.Sheets(1).Range("E2:E" & j).Value

on ne peut pas mettre dans une cellule les valeurs d'une plage

Bonne correction

A+

Merci beaucoup j'ai corrigé les erreurs que vous m'avez présenté. Mais il me reste une erreur, ma condition IF ne prends pas en compte le OR.

Avez-vous une solution ?

voici la partie du code modifié :

compteur3 = wb3.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
i = 2
j = 2
While j <> compteur3
    If wb3.Sheets(1).Range("L" & j).Value = "DISTRIBUTION" Or wb3.Sheets(1).Range("L" & j).Value = "ADDUCTION" Then
        If wb3.Sheets(1).Range("E" & j).Value = "AERIEN" Then
            Wb.Sheets(1).Range("A" & i).Value = wb3.Sheets(1).Range("E" & j).Value
            Wb.Sheets(1).Range("B" & i).Value = wb3.Sheets(1).Range("L" & j).Value
            Wb.Sheets(1).Range("C" & i).Value = wb3.Sheets(1).Range("C" & j).Value
            Wb.Sheets(1).Range("D" & i).Value = wb3.Sheets(1).Range("O" & j).Value
        i = i + 1
        ElseIf wb3.Sheets(1).Range("E" & j).Value = "SOUTERRAIN" Then
            Wb.Sheets(1).Range("A" & i).Value = wb3.Sheets(1).Range("E" & j).Value
            Wb.Sheets(1).Range("B" & i).Value = wb3.Sheets(1).Range("L" & j).Value
            Wb.Sheets(1).Range("C" & i).Value = wb3.Sheets(1).Range("C" & j).Value
            Wb.Sheets(1).Range("D" & i).Value = wb3.Sheets(1).Range("O" & j).Value
        i = i + 1
        End If
    End If

j = j + 1
Wend

Cela peut provenir des données dans la feuille où "DISTRIBUTION" et/ou "ADDUCTION" seraient mal orthographiés ou bien avec des espaces avant ou après ?

une modif possible (pour les espaces) serait :

If wb3.Sheets(1).Range("L" & j).Value Like  "*DISTRIBUTION*" Or wb3.Sheets(1).Range("L" & j).Value Like "*ADDUCTION*" Then

A+

Rechercher des sujets similaires à "probleme increment vba"