La méthode range de l'objet worksheet a échoué
Bonjour à tous,
Je dois réaliser un programme dans lequel je compare les références de pièces qui sont dans mon fichier actif et également dans un fichier extérieur.
Si l'une des réference est présente dans les deux fichiers, alors je dois copier les budgets 2024/2025/2026/2027 de la colonne Q2024B ou Q2025B etc... (du fichier extérieur) dans la colone Budget 2024 ou Budget 2025 etc...(du fichier actif)
Sub Ajouter_Budget()
Dim FichierSource As Variant
Dim WbSource As Workbook
Dim Shcible As Worksheet
Dim año As String
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim c As Range
Dim d As Range
Dim Colaño As String
Dim Colref As String
año = InputBox("Entra el año en curso :")
Set Shcible = Sheets("L")
FichierSource = Application.GetOpenFilename("Fichiers (*.xlsx),*.xlsx")
If FichierSource = False Then GoTo Fin
Application.ScreenUpdating = False
Set WbSource = Workbooks.Open(FichierSource)
Set c = WbSource.Worksheets("Budget PMD Auto").Cells.Find("Q" & año & "B", LookIn:=xlValues) 'va nous sevir pour trouver la colonne dans laquelle se trouve Q2023B par exemple
Set d = WbSource.Worksheets("Budget PMD Auto").Cells.Find("Budget " & año, LookIn:=xlValues) 'va nous sevir pour trouver la colonne dans laquelle se trouve Budget 2023 par exemple
For j = 1 To 4 'nous sert pour extraire les budgets 2024/2025/2026/2027
For i = 2 To 76
For x = 15 To 3973
If Shcible.Range("F" & i) = WbSource.Worksheets("Budget PMD Auto").Range("I" & x) Then
Colaño = Split(c.Address, "$")(1) 'trouve la lettre de la colonne dans laquelle se trouve Q2023B
Colref = Split(d.Address, "$")(1) 'trouve la lettre de la colonne dans laquelle se trouve Budget 2023
WbSource.Worksheets("Budget PMD Auto").Range("Colaño" & x).Copy Destination:=Shcible.Range("Colref" & i) """""ERREUR ICI"""""
End If
Next x
Next i
año = año + 1
Next j
On Error GoTo Fin
Application.ScreenUpdating = True
MsgBox ("Fin")
GoTo Fin
Fin:
Application.ScreenUpdating = True
WbSource.Close
Set Shcible = Nothing
Set WbSource = Nothing
End Sub
Pourriez vous m'aider à trouver l'erreur correspondante à ce message : "la méthode range de l'objet worksheet a échoué" à l'endroit où j'ai mis ERREUR ? et plus si affinités ;)
Merci d'avance.
Bonjour Polosc,
A tester :
Sub Ajouter_Budget()
Dim FichierSource As Variant
Dim WbSource As Workbook
Dim Shcible As Worksheet
Dim año As String
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim c As Range
Dim d As Range
Dim Colaño As String
Dim Colref As String
año = InputBox("Entra el año en curso :")
Set Shcible = Sheets("L")
FichierSource = Application.GetOpenFilename("Fichiers (*.xlsx),*.xlsx")
If FichierSource = False Then GoTo Fin
Application.ScreenUpdating = False
Set WbSource = Workbooks.Open(FichierSource)
For j = 1 To 4 'nous sert pour extraire les budgets 2024/2025/2026/2027
Set c = WbSource.Worksheets("Budget PMD Auto").Cells.Find("Q" & año & "B", LookIn:=xlValues) 'va nous sevir pour trouver la colonne dans laquelle se trouve Q2023B par exemple
Set d = WbSource.Worksheets("Budget PMD Auto").Cells.Find("Budget " & año, LookIn:=xlValues) 'va nous sevir pour trouver la colonne dans laquelle se trouve Budget 2023 par exemple
For i = 2 To 76
For x = 15 To 3973
If Shcible.Range("F" & i) = WbSource.Worksheets("Budget PMD Auto").Range("I" & x) Then
Colaño = Split(c.Address, "$")(1) 'trouve la lettre de la colonne dans laquelle se trouve Q2023B
Colref = Split(d.Address, "$")(1) 'trouve la lettre de la colonne dans laquelle se trouve Budget 2023
WbSource.Worksheets("Budget PMD Auto").Range(Colaño & x).Copy Destination:=Shcible.Range(Colref & i)
End If
Next x
Next i
año = año + 1
Next j
On Error GoTo Fin
Application.ScreenUpdating = True
MsgBox ("Fin")
GoTo Fin
Fin:
Application.ScreenUpdating = True
WbSource.Close
Set Shcible = Nothing
Set WbSource = Nothing
End SubIl semble que l'erreur vient de la façon dont vous utilisez les noms de colonne que vous avez extraits pour obtenir une plage. Vous essayez d'utiliser les chaînes de caractères "Colaño" et "Colref" comme s'ils étaient des noms de variables, mais ce sont en fait des chaînes de caractères. Vous devez les concaténer avec la valeur de x ou i pour obtenir le nom complet de la plage.
Notez que dans votre code, vous avez "Colaño" & x et "Colref" & i, qui vont essayer de concaténer la chaîne de caractères "Colaño" avec x, et "Colref" avec i. Ce que vous voulez faire, c'est concaténer la valeur de la variable Colaño avec x, et la valeur de la variable Colref avec i. C'est pourquoi vous devez enlever les guillemets autour de "Colaño" et "Colref" dans cette ligne.
De plus, vous avez utilisé año = año + 1 à l'intérieur de votre boucle For i, mais año est utilisé pour déterminer les colonnes à copier et coller. Ainsi, chaque fois que vous augmentez año, vous modifiez les colonnes que vous copiez et collez pendant le processus de bouclage. Vous devriez plutôt déplacer cette ligne à la fin de la boucle For j.
J'espère que cela vous aidera !
Merci c'etait exactement ca !
Pas de souci :)