Problème avec Worksheet_Change(ByVal Target As Range)

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Arpette

XLDnaute Impliqué
Bonsoir à tous, j'ai un problème avec mon code ci-dessous. Je souhaite dans un premier temps insérer une colonne en E puis y constituer ma valeur et ensuite effectuer un Worksheet_Change(ByVal Target As Range). Mais ça ne fonctionne pas et je ne suis pas certain que ça puisse marcher avec la boucle qu'il y a à l'intérieur du code.
Merci de votre aide.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim plage As Range
Dim R As Range

Worksheets("Body").Columns("E:E").Insert Shift:=xlToRight
Cells(1, 5) = "PO-Item-ASN"
    
Nb = Range([D2], [D65536].End(xlUp)).Rows.Count
    For i = 2 To Nb + 1
        Valeur = Split(Cells(i, 4).Text, "/")
        Cells(i, 5).Value = Valeur(0) & "-" & Cells(i, 23).Value & "-" & Cells(i, 33).Value
    
  
  With workbooks("5-17.csv").Sheets("5-17") 'prend en compte le classeur 5-17 feuille 5-17
    Set plage = .Range("H2:H" & .Range("H65536").End(xlUp).Row) 'définit la plage de recherche
    End With 'fin de la prise en compte du classeur et la feuille 5-17
 
    Set R = pl.Find(Target.Value, , xlValues, xlWhole) 'définit la recherche
       
        Target.Offset(0, 11).Value = R.Offset(0, 16).Value
  
  Next i
End Sub
 
Re : Problème avec Worksheet_Change(ByVal Target As Range)

Bonsoir Arpette
Une chose est certaine :
Code:
[COLOR="DarkSlateGray"][B]    Set R = pl.Find(Target.Value, , xlValues, xlWhole)[/B][/COLOR]
ne peut fonctionner en l'état. La méthode Find requiert un "qualificateur d'objet" bien défini. Or, pl désigne un "Variant" vide dans votre procédure et ne qualifie pas une plage de cellules. Donc vous ne pouvez lui appliquer la méthode Find.

Pour le reste, il faudrait en savoir un peu plus sur les objets auxquels s'appliquent cette procédure et sur ce qu'elle est censée faire. En l'état, c'est assez difficile à deviner...
Déposer un classeur avec un minimum de données serait sans doute une bonne idée.​
ROGER2327
#4336


Vendredi 13 Haha 138 (Saint et Sainte Fenouillard, Sainte famille, SQ)
27 Vendémiaire An CCXIX
2010-W42-1T20:01:45Z
 
Re : Problème avec Worksheet_Change(ByVal Target As Range)

Salut Arpette et le forum
Si on doit interpréter ce que tu demandes, ce sera forcement d'une manière qui n'est pas la bonne (Loi de Murphy).
Mais ça ne fonctionne pas
Avec une telle précision, on peut aider !

Petit rappel : on ne sait rien de ton fichier et de ta demande, hormis ce qui est dans les postes. Ce qui est évident, ne l'est que pour celui qui travaille avec le fichier, pas pour ceux qui pourraient envisager de te dépanner.

Juste quelques remarques anodines :
- Tu déclares certaines variables. Pourquoi pas toutes (pl, valeur) ?
- Tu utilises
Code:
[FONT=&quot]Worksheets("Body").Columns("E:E").Insert Shift:=xlToRight[/FONT]
À quoi sert [FONT=&quot]Shift:=xlToRight ? Tu peux mettre [/FONT][FONT=&quot]Shift:=xlToLeft ???[/FONT]
Code:
[FONT=&quot]Worksheets("Body").Columns("E:E").Insert[/FONT]
Comme tu utilises une macro à lancement automatique, j'espère que celle-ci n'est pas sur le module lié à la feuille "Body", sous peine d'une boucle infinie.
Code:
Nb = Range([D2], [D65536].End(xlUp)).Rows.Count
    For i = 2 To Nb + 1
Ça me semble complexifier ton code pour rien. Pourquoi pas simplement
Code:
For i = 2 To Cells(rows.Count,"D").End(xlUp)).Row
Ou un code similaire ?

-Le but des indentation n'est pas de rendre le code plus "joli", mais de permettre de le rendre plus lisible.
A+
[FONT=&quot]
[/FONT]
 
Re : Problème avec Worksheet_Change(ByVal Target As Range)

Salut Arpette et le forum
Si on doit interpréter ce que tu demandes, ce sera forcement d'une manière qui n'est pas la bonne (Loi de Murphy).Avec une telle précision, on peut aider !

Petit rappel : on ne sait rien de ton fichier et de ta demande, hormis ce qui est dans les postes. Ce qui est évident, ne l'est que pour celui qui travaille avec le fichier, pas pour ceux qui pourraient envisager de te dépanner.

Juste quelques remarques anodines :
- Tu déclares certaines variables. Pourquoi pas toutes (pl, valeur) ?
- Tu utilises
Code:
[FONT=&quot]Worksheets("Body").Columns("E:E").Insert Shift:=xlToRight[/FONT]
À quoi sert [FONT=&quot]Shift:=xlToRight ? Tu peux mettre [/FONT][FONT=&quot]Shift:=xlToLeft ???[/FONT]
Code:
[FONT=&quot]Worksheets("Body").Columns("E:E").Insert[/FONT]
Comme tu utilises une macro à lancement automatique, j'espère que celle-ci n'est pas sur le module lié à la feuille "Body", sous peine d'une boucle infinie.
Code:
Nb = Range([D2], [D65536].End(xlUp)).Rows.Count
    For i = 2 To Nb + 1
Ça me semble complexifier ton code pour rien. Pourquoi pas simplement
Code:
For i = 2 To Cells(rows.Count,"D").End(xlUp)).Row
Ou un code similaire ?

-Le but des indentation n'est pas de rendre le code plus "joli", mais de permettre de le rendre plus lisible.
A+
[FONT=&quot]
[/FONT]

Bonsoir Roger, bonsoir Gorfaël, ci-joint mes deux fichiers qui représente se que je souhaite. Donc j'ai un fichier Test1 dans lequel j'insere une colonne et où je créé ma valeur. Une fois cette valeur créée, je souhaite faire une recherche sur le second fichier Test2 et renvoyer la quantité. Mon code est dans le classeur Test1 feuille Test1.
Merci pour votre aide.
 

Pièces jointes

Re : Problème avec Worksheet_Change(ByVal Target As Range)

Bonsoir Roger, bonsoir Gorfaël, ci-joint mes deux fichiers qui représente se que je souhaite. Donc j'ai un fichier Test1 dans lequel j'insere une colonne et où je créé ma valeur. Une fois cette valeur créée, je souhaite faire une recherche sur le second fichier Test2 et renvoyer la quantité. Mon code est dans le classeur Test1 feuille Test1.
Merci pour votre aide.

Rebonsoir à vous, avec vos recommandations, j'ai modifié mon code ça me semble plus simple et ça marche. Si vous voyez plus simple ou des erreurs d'écriture, n'hésitez pas.
Merci pour votre aide.
Code:
Sub Test()
Dim i As Long
Dim v As Variant
Worksheets("Test1").Columns("C:C").Insert Shift:=xlToRight
Cells(1, 3) = "Cde-Article-Fichier" 'insertion d'une colonne pour constituer ma valeur
    
Nb = Range([B2], [B65536].End(xlUp)).Rows.Count
    For i = 2 To Nb + 1
        Valeur = Split(Cells(i, 2).Text, "/") 'split à /
        Cells(i, 3).Value = Valeur(0) & "-" & Cells(i, 4).Value & "-" & Cells(i, 5).Value
        'constitution de ma valeur
           
        Cells(i, 6) = Application.VLookup(Cells(i, 3).Value, Workbooks("Test2.xls").Sheets("Test2").Range("D2:E65536"), 2, False) 'définit la recherche
       
        v = Application.VLookup(Cells(i, 3).Value, Workbooks("Test2.xls").Sheets("Test2").Range("D2:E65536"), 2, False)
        Cells(i, 6) = IIf(IsError(v), "0", v)
    Next i
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
905
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
9
Affichages
506
Retour