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+