Erreur 1004 la méthode range de l'objet global à échoué

Bonjour tous le monde,

J'ai un code erreur dans le code ci dessous que idéalement je souhaites placer dans UF INITIALIZE

For Each c In .Range("j2:j" & .Range("j" & .Rows.Count).End(xlUp).Row)
If .Range("j" & c.Row).Value <> "" Then
alerte = Application.WorksheetFunction.SumIf(Range("f2:f"), .Range("f" & c.Row).Value, Range("j2:j"))
If alerte < .Range("o" & c.Row).Value Then
.Range("v" & c.Row).Value = "A commander"
End If
End If
Next c

Ca à l'air correct, qui peut m'aider SVP.

J'ai essayer une autre méthode mais j'obtiens "0" en résultat mais plus d'erreur.

mais ce n'est pas ce que je recherche non plus.

le but étant de faire un somme si ens en vba depuis UF INITIALIZE.

Dim T As Single
With Worksheets("MAGASIN").ListObjects("Tablmag")
                If .ListRows.Count = 0 Then
                    .ListRows.Add: lig = 1
                Else: .ListRows.Add: lig = .ListRows.Count
                End If
                With .DataBodyRange

Set plage = Sheets("BDD").Range("E2:E" & Sheets("BDD").Range("E" & .Rows.Count).End(xlUp).Row)
For Each cel In plage
If cel.Offset(0, 0).Value = .Item(lig, 6) Then
T = T + cel.Offset(0, 4).Value
lig = lig + 1
End If
cel.Offset(0, 16) = T
Next cel

End With

End With

Bonjour,

Dans le premier code, et dans cette ligne, quelle est la dernière ligne de la plage "f2:f" et "j2:j"

alerte = Application.WorksheetFunction.SumIf(Range("f2:f"), .Range("f" & c.Row).Value, Range("j2:j"))

Bonjour Arturo,

Je n'ai pas de dernière ligne, le tableau évolue de jour en jour, l'idée est de prendre en compte la colonne entière.

Le deuxième code renvoie 0.

Salut,

En travaillant sur des tableaux nul besoin de VBA tu peux le faire avec des formules, si j'ai tout bien compris.

image

Le tableau se mettant à jour au fur et à mesure, je préfère autant faire un code VBA dans UF INITIALIZE.

Je n'ai pas de dernière ligne, le tableau évolue de jour en jour, l'idée est de prendre en compte la colonne entière.

Alors ceci: exemple ici, si la première cellule pleine en haut à gauche de votre tableau est A1

    DerLig = Range("A1").CurrentRegion.Rows.Count
    alerte = Application.WorksheetFunction.SumIf(Range("f2:f" & DerLig), .Range("f" & c.Row).Value, Range("j2:j" & DerLig))

Bonjour Arturo,

Pas concluant

erreur d'exécution 9

L'indice n'appartient pas à la sélection

 DerLig = Range("A1").CurrentRegion.Rows.Count
 For Each c In .Range("j2:j" & .Range("j" & .Rows.Count).End(xlUp).Row)
If .Range("f" & c.Row).Value <> "" Then
   .Range("v" & c.Row).Value = Application.WorksheetFunction.SumIf(Range("f2:f" & DerLig), .Range("f" & c.Row).Value, Range("j2:j" & DerLig))

End If
Next c
End With

Bonjour,

Pas concluant

Je ne fais que vous donner une façon de procéder, il faut l'adapter correctement à votre fichier. Je ne peux pas vous donner un code parfaitement exact puisque je n'ai aucune idée sur ce à quoi ressemble votre fichier, de plus, vous signalez "erreur 9" sans préciser à quel endroit elle se situe.

-"L'indice n'appartient pas à la sélection" , Quel indice?

-Votre tableau commence-t-il en A1?

-La colonne qui sert à déterminer la dernière ligne(dans mon exemple la colonne "A") contient -t-elle des cellules vides? si oui, alors remplacer par:

DerLig = Range("A"& rows.count).end(xlup).Row

Si après cela ça ne marche toujours pas, faites l'effort de déposer une copie de votre fichier sans données confidentielles (quelques lignes suffisent pour faire les tests)

Cdlt

Bonjour Arturo,

L'erreur avec l'indice apparait sur le code en question.

C'est un tableau structuré.

ci joins le tableau, sans l'UF et sans code, juste pour voir à quoi ressemble le tableau.

Logiquement cela devrait fonctionner.

7magasin.xlsx (165.08 Ko)

Bonjour Arturo,

J'ai trouvé, ne vous tracassez pas, merci tout de même.

Je place le code ci dessous au cas ou et je clôture.

j'ai un tableau structuré, c'était la piste à suivre en fait.

With Worksheets("MAGASIN").ListObjects("Tablmag")
                If .ListRows.Count = 0 Then
                    .ListRows.Add: lig = 1
                Else: .ListRows.Add: lig = .ListRows.Count
                End If
                With .DataBodyRange
                Set plage = Sheets("MAGASIN").Range("F2:F" & Sheets("MAGASIN").Range("F" & .Rows.Count).End(xlUp).Row)
   For Each cel In plage

If cel.Offset(0, 0).Value = .Item(lig, 6) Then
.cel.Offset(0, 16) = Application.SumIf(Range("f2:f"), cel.Offset(0, 0).Value, Range("j2:j"))
End If
Next cel
End With
End With

Pourquoi passer par du VBA alors qu'une simple formule suffit, en V2:

=SI($J2="";"";SI(SOMMEPROD(($F$2:$F11=$F2)*($J$2:$J11))<$O2;"A commander";""))

Plus facile à analyser et aisément adaptable à vos besoins.

Cdlt

Non je préfère ainsi.

Cela évite les mauvaises manipulations dans le tableau.

En UF INITIALIZE, je sécurise.

Merci tout de même pour votre implication.

Bonsoir,

Rien ne vous empêche d'enregistrer la formule et de la resservir à chaque fois, d'autant plus qu'avec le tableau structuré vous n'aurez aucun souci, vous pourrez modifier le tableau, le déplacer la formule suivra toujours.

Le code qui réécrit la formule dans la colonne "Alerte" (à insérer dans votre code existant)

Col_Alerte = ActiveSheet.ListObjects("Tablmag").HeaderRowRange.Find("ALERTE", LookAt:=xlWhole).Column 'Localise la colonne "ALERTE"
Cells(2, Col_Alerte).FormulaR1C1 = "=IF(Tablmag[[#This Row],[QTE STOCK]]="""","""",IF(SUMPRODUCT(([DESIGNATION]=Tablmag[[#This Row],[DESIGNATION]])*([QTE STOCK]))<Tablmag[[#This Row],[QTE MINI]],""A commander"",""""))" 'Applique la formule sur la première ligne qui sera automatiquement recopiée jusqu'en fin de tableau

Cdlt

Oui aussi, il est vrai qu'il existe mille manières de faire les choses.

Je trouve plus propre le code avec offset.

Merci tout de même

Je trouve plus propre le code avec offset.

Et si un jour, vous voulez insérer une colonne ou en supprimer une(ou plusieurs) avant la colonne "ALERTE", votre code ne vaudra plus rien.

Logiquement c'est aboutit comme je le souhaites et si besoin, je modifie le code, la structure des tableaux sera verrouillée pour les autres utilisateur.

Rechercher des sujets similaires à "erreur 1004 methode range objet global echoue"