Erreur qualificateur incorrect
Bonjour ,
Je souhaite consolider des données ensuite faire un control de cohérence .
J'ai une erreur qui apparait qualificateur incorrect !
Ma question est tout d'abord que veux dire cette erreur et est ce que vous auriez une idée de ce qui ne vas pas dans mon code ?
Je précise que je fait appel à des feuilles d'autres classeurs dans mon ma condition if .
Dim wb()
Dim WS_I As Worksheet
Dim WS_II As Worksheet
Dim ligne As Long
Dim i As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
wb = Array("contrib1", "contrib2", "contrib3", "contrib4")
'Fichier consolidation des données '
Set WS_I = ThisWorkbook.Worksheets("Feuil2")
For i = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(i) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_I.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next i
'Fichier control imput output '
Set WS_II = ThisWorkbook.Worksheets("control_imput_output")
For n = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(n) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_II.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next n
If wb.Sheets("contrib1") <> Empty Then
For ligne = 12 To 15
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = wb.Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = wb.Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Merci par avance
Cordialement ,
Bonjour,
Je ne suis pas spécialiste du VBA mais je crois qu'un qualificateur incorrect se trouve sur cette ligne :
If wb.Sheets("contrib1") <> Empty ThenEn effet, wb n'est pas un objet worbook mais un array. Vous ne pouvez donc pas sélectionner la feuille d'un tableau, il faut préciser le worbook avec le qualificateur Workbook. De plus la méthode Empty ne s'utilise pas comme ça. Soit c'est Not IsEmpty(Expression), soit <> "" mais dans votre cas ça ne s'applique pas. Je pense que le code suivant est plus adapté si vous souhaitez vérifier la présence de contenu sur une feuille :
If WorksheetFunction.CountA(Workbooks(wb(i) & ".xlsx").Sheets("contrib1")) > 0 ThenCdlt,
Merci pour ton retour ,
Effectivement la ligne avec Emppty n'est pas terrible et ne colle pas avec ce que je veux faire .
J'ai corriger le qualificateur .
Sub transfert()
Dim wb()
Dim WS_I As Worksheet
Dim WS_II As Worksheet
Dim ligne As Long
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
wb = Array("contrib1", "contrib2", "contrib3", "contrib4")
'Fichier consolidation des données '
Set WS_I = ThisWorkbook.Worksheets("Feuil2")
For i = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(i) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_I.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next i
'Fichier control imput output '
Set WS_II = ThisWorkbook.Worksheets("control_imput_output")
For n = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(n) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_II.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next n
For ligne = 12 To 15
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(2).Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Seulement j'ai maintenant une erreur Sub ou fonction non défini
Bonjour,
Sur quelle ligne ? Avez vous exécuté le code en pas à pas détaillé en vérifiant les valeurs des variables au fil de l’exécution ? Ça aide beaucoup au débogage.
Je ne suis pas certain que "Workbook(2)" soit autorisé en VBA ..
Mais un expert comprendra peut être mieux que moi.
Cdlt,
Bonjour à tous,
déjà il faudrait donner envie de lire le code en utilisant la balise </> qui le rend plus lisible et conserve les indentations
Et oui, indiquer la ligne de l'erreur en plus du message.
Rien à voir avec ton pb mais je pense que ton Exit For est mal placé. Tu sors systématiquement après la 1ère ligne du For.
eric
Merci pour tes remarques ! Mon erreur commence dès la premiere ligne Sub transfert () !Sub ou Function non défini .
Sub transfert()
Dim wb()
Dim WS_I As Worksheet
Dim WS_II As Worksheet
Dim ligne As Long
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
wb = Array("contrib1", "contrib2", "contrib3", "contrib4")
'Fichier consolidation des données '
Set WS_I = ThisWorkbook.Worksheets("Feuil2")
For i = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(i) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_I.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next i
'Fichier control imput output '
Set WS_II = ThisWorkbook.Worksheets("control_imput_output")
For n = 0 To UBound(wb)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & wb(n) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_II.Cells.PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'skipblanc permettra de ne pas écraser les cellules avec valeur par des cellules sans valeur'
Next n
For ligne = 12 To 15
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(2).Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
For ligne = 18 To 21
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(2).Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
For ligne = 24 To 26
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(2).Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
For ligne = 29 To 32
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(3).Sheets("contrib3").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
For ligne = 33 To 38
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(3).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(3).Sheets("contrib3").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
If ThisWorkbook.Worksheets("control_imput_output").Cells(39, 5) = Workbook(3).Sheets("contrib1").Cells(39, 5) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
For ligne = 46 To 47
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(3).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(3).Sheets("contrib3").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
For ligne = 48 To 50
If (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 5) = Workbook(1).Sheets("contrib1").Cells(ligne, 5)) And (ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 6) = Workbook(2).Sheets("contrib2").Cells(ligne, 6)) Then
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "OK"
Else
ThisWorkbook.Worksheets("control_imput_output").Cells(ligne, 7) = "KO"
End If
Exit For
Next ligne
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End SubCordialement ,
Il faut indiquer la ligne surlignée en jaune lors de l'erreur.
Je ne pense pas que ce soit celle de Sub transfert()
Sinon il faut alléger et anonymisé ton fichier et le déposer
C'est bien la première ligne qui est souligné en jaune lors du lancement de ma macro (la ligne Sub transfertb () ).
, je peux l'assurer .
Cordialement ,
Je veux bien te croire mais un tel message d'erreur apparait lors de l'appel d'une macro depuis une autre macro, et sur cette ligne d'appel.
Donc sans ton fichier...
bonsoir à tous,
@akoss
s'agissant d'une erreur de compilation, la première ligne est en effet indiquée en jaune, mais l'erreur est surlignée en bleu dans le code (avec les paramètres standard)
Ergotamine t'a indiqué le problème.
workbook() n'est pas correct, utilise workbooks()
Merci pour tout vos retours ,
J'ai fait la correction et je n'ai plus d'erreur !Effectivement chacune de vos réponses mettait un doigt sur une erreur dans le code et dans la compréhension de l'erreur .
Cordialement ,