Problème avec fonction rechercheh en vba

Compress

XLDnaute Occasionnel
Voici le code que j'ai écris, mais j'ai une erreur sur l'objet RangeObj
et une erreur sur Else ou il me dit qu'il n'y a pas de if...? alors que j'en ai un en début de ligne... je ne comprends pas.

Code:
Private Sub ajouter_volume_ILN_Click()
    
    Dim vol As Long
    Dim nom_ILN As String
    Dim PlageILN2 As Range
    Dim RangeObj As Range
    
    With Sheets("Synthèse")
    
    vol = TextBox_volume_ILN
    
    Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, der_colonne))
    nom_ILN = ComboBox_ILN_choisis.Text
    .Cells(16, 1).Select
    Set RangeObj = PlageILN2.Find(What:="ILN" & nom_ILN, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If RangeObj Is Nothing Then MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale" Else: RangeObj.Select
    RangeObj.Offset(2, 0).Select
    ActiveCell.Value = vol
    End If
    End With
    
End Sub

Pourriez-vous m'aider ?
Dans ma combobox j'ai listé tous les noms d'ILNs présents sur la ligne 16 en effet un nom est utilisé pour deux colonnes (j'ai utilisé lorsque j'ai créé mes colonnes "centrer sur plusieurs colonnes"). Ainsi dans ma combobox je n'ai que les ILNs présents une case sur deux (là dessus pas de prob).
Ensuite j'aimerai que plus tard dans le usf lorsque la personne veut ajouter un volume sur un ILN donné, l'outil cherche l'ILN souhaité et se place dans la case correspondante au volume à ajouter. (elle se situe 2 ligne en dessous de là où la fonction est censée rechercher les ILN).

Merci d'avance
 
G

Guest

Guest
Re : Problème avec fonction rechercheh en vba

Bonjour Compress,

soit tu écris sur une seule ligne
Code:
       If RangeObj Is Nothing Then MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale" Else: RangeObj.Select
soit tu écris :

Code:
If RangeObj Is Nothing Then
      MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale"
Else
       RangeObj.Select
       RangeObj.Offset(2, 0).Select
       ActiveCell.Value = vol
End IF

Code:
Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, der_colonne))

Où est défini der_colonne?

A+
 

Catrice

XLDnaute Barbatruc
Re : Problème avec fonction rechercheh en vba

Bonjour compress, bonjour Hasco,

Il faut effectivement definir der_colonne.
Personnellement, j'eviterais de faire des Select, voir le code ci-dessous un peu adapté pour tester sans ton USF.

J'ai enlevé le After. Il est facultatif. Si tu veux vraiement commencer apres la permiere cellule, on peut modifier PlageILN2.
C'est d'ailleurs ce que fait dèjà ton code, tu veux commencer apres .Cells(16, 1) et ta range est définie sur .Cells(16, 2). Donc pour moi, pas de After ...

---------------------------
Sub Test()

der_colonne = 10
With Sheets("Synthèse")
vol = TextBox_volume_ILN
Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, der_colonne))

nom_ILN = "Test" 'Modification pour le test

Set RangeObj = PlageILN2.Find(What:="ILN" & nom_ILN, LookIn:=xlValues, LookAt:=xlPart)
If RangeObj Is Nothing Then
MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale"
Else
RangeObj.Offset(2, 0).Value = vol
End If

End With
End Sub
---------------------------

Sinon, je crois que ton pb vient de là (voir incohérence en bleu gras et en vert) :

Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, der_colonne))
nom_ILN = ComboBox_ILN_choisis.Text
.Cells(16, 1).Select '<= Hors plage
Set RangeObj = PlageILN2.Find(What:="ILN" & nom_ILN, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If RangeObj Is Nothing Then MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale" Else: RangeObj.Select
RangeObj.Offset(2, 0).Select
ActiveCell.Value = vol
End If '<= A enlever
End With
 
Dernière édition:

Compress

XLDnaute Occasionnel
Re : Problème avec fonction rechercheh en vba

Le code ne marche toujours pas.

Pour der_colonne voici le sub où il est défini (je l'ai placé dans le même usf au dessus)
Plus haut dans le usf, j'ai mis tout au début "Public der_colonne As Integer"

Code:
Private Sub ComboBox_ILN_choisis_enter()
    Dim i As Integer
    Dim c As Range
    Dim PlageILN As Range
    i = 1
    With Sheets("Synthèse")
    der_colonne = .Rows(17).Find("*", , , , , xlPrevious).Column
    Set PlageILN = .Range(.Cells(16, 2), .Cells(16, der_colonne))
    For Each c In PlageILN
    If c.Value <> "" Then
        ComboBox_ILN_choisis.AddItem c.Value
    End If
    Next
    End With
End Sub

Quand j'éxecute le code avec vos modifications je n'ai plus l'erreur sur le else (ok j'avais été un peu nul sur ce coup...)
mais j'ai le fait que même en ayant créer une colonne pour un ILN, après il me la trouves bien dans ma combobox (il me met la liste exacte des ILN que j'ai créer (donc cool) mais pour y ajouter un volume, il me met ma msgbox "ILN non trouvé...."

Merci de votre aide...!
 
Dernière édition:

Compress

XLDnaute Occasionnel
Re : Problème avec fonction rechercheh en vba

J'ai essayé avec ta proposition mais ça ne change pas.

Bon les données présentes sont des données test, à priori il n'y a rien de confidentiel sur le fichier mais je pense que le mieux c'est que je vous le transmette.

Le voici donc :
http://cjoint.com/?lAnbPHCVLL

Je débute en vba et j'ai déjà bcp appris sur votre forum.
Je dois coder dans le cadre d'un stage et d'une mission de ce stage, un outil de chiffrage avant projet qui générerait des synthèses de coûts puis ces synthèses sont censés s'exportaient dans un fichier nommé BDL (base de données logistiques).

L'outil est pour un grand constructeur automobile.

Bien cordialement. J'aurai bien évidemment besoin de vous sur d'autres point j'en suis sur.

Les usf ne sont pas mis en forme, pour le moment je teste les fonctions au fur et à mesure.

Dans usf definition projet, je définis les clefs du projet, dans l'usf variable général seul la fonction ajout_iln a été codé et fonctionne correctement en créant les colonnes dans synthèse ensuite dans définition sourcing (l'usf sera plus complexe) mais le but est d'attribuer des volumes à un ILN donné.

Merci encore pour tout.
 

Compress

XLDnaute Occasionnel
Re : Problème avec fonction rechercheh en vba

Est-ce le fait de centrer sur deux colonnes le titre des ILN qui fait que dans la recherche Find il ne trouve pas l'ILN recherché ?

Petite erreur que j'ai corrigé mais ça ne marche quand même pas.

Quand je crée le titre de la colonne j'utilise dans l'usf variable générale :
Code:
ActiveCell.FormulaR1C1 = "ILN " & ILN

Donc j'ai modifié ma recherche comme suit (avec un espace après ILN) :
Code:
Set RangeObj = PlageILN2.Find(What:="ILN " & nom_ILN, LookIn:=xlValues, LookAt:=xlPart)

J'ai testé si le fait de centrer sur plusieurs colonnes influés sur le résultats mais quenéni... :( même en mettant l'ILN dans une seule case en tête de colonne, une fois le bouton ajouter le volume enclencher il ne me trouve toujours pas l'ILN dans lequel ajouter le volume... Je suis vraiment perdu là...

J'attends de vos nouvelles si mon problème continue de vous intéresser....

Cordialement.
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Problème avec fonction rechercheh en vba

Bonsoir,

J'ai testé le code suivant qui fonctionne :
'-----------------------
Private Sub ComboBox_ILN_choisis_enter()
Dim c As Range
Dim PlageILN As Range
With Sheets("Synthèse")
Set PlageILN = .Range(.Cells(16, 2), .Cells(16, .Cells(17, 256).End(xlToLeft).Column))
For Each c In PlageILN
If c.Value <> "" Then
ComboBox_ILN_choisis.AddItem c.Value
End If
Next
End With
End Sub
'-----------------------
Private Sub ajouter_volume_ILN_Click()
Dim PlageILN2 As Range
Dim RangeObj As Range
With Sheets("Synthèse")
Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, .Cells(17, 256).End(xlToLeft).Column))
End With
Set RangeObj = PlageILN2.Find(What:=ComboBox_ILN_choisis.Text, LookIn:=xlValues, LookAt:=xlPart)
If RangeObj Is Nothing Then
MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale"
Else
RangeObj.Offset(2, 0).Value = TextBox_volume_ILN
End If
End Sub
'-----------------------

Je ne comprend pas pourquoi tu veux concaténer ceci :
"ILN " & nom_ILN ?!

Personnellement, je trouve qu'il y a trop de variables dans ton code. J'en ai enlevé.

-----------------------------
Tu peux egalement essayer ceci :
S'il y a des cellules fusionnées :
Private Sub ComboBox_ILN_choisis_enter()
Dim c
For Each c In Rows(16).SpecialCells(xlCellTypeConstants, 23)
If c.Value <> "" Then ComboBox_ILN_choisis.AddItem c.Value
Next
End Sub


S'il n'y a pas de cellules fusionnées :
Private Sub ComboBox_ILN_choisis_enter()
Dim c
For Each c In Rows(16).SpecialCells(xlCellTypeConstants, 23)
ComboBox_ILN_choisis.AddItem c.Value
Next
End Sub
 
Dernière édition:

Compress

XLDnaute Occasionnel
Re : Problème avec fonction rechercheh en vba

ça marche nickel Catrice, et pour mon code je suis aussi d'accord qu'il y a trop de variables mais je n'ai pas l'habitude de coder en vba et j'ai du mal à savoir s'il faut que je déclare ou pas des choses en variables. Enfin bon il faudra que je fasse une passe nettoyage intensif de toute façon.

Je tenais à vous remercier infiniment pour le temps que vous prenez à essayer d'aider les autres, je perds beaucoup de temps chaque jour en cherchant mes solutions sur le forum car je tombe sur de supers sujets comme celui utilisant googlemap et où je trouve que tu as fait un super boulot ! Encore bravo...!

Bon et bien je vais essayer de plus vous déranger. J'ai un soucis sur le fait que la comboBox une fois ajouter un volume me charge en double les ILN mais il suffit que ej configure correctement mon bouton.

Juste un détail enfin une confirmation, lorsque je veux qu'à chaque fois qu'une personne ajouter un volume celui-ci s'ajoute au volume précèdemment rentré dans l'ILN donné, il faut que je modifie la ligne tel qu'ainsi (enfin ça a l'air de fonctionner ;) quand je fais un truc qui marche je suis content...;))

Code:
RangeObj.Offset(2, 0).Value = RangeObj.Offset(2, 0).Value + TextBox_volume_ILN

Voilà encore un énorme merci pour le temps passé que ce soit pour mon problème ou pour les autres car au final ça aide tout le monde....
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Problème avec fonction rechercheh en vba

Bonjour,

Ci-joint une version un lightée qui gére le pb de ta liste :
Je l'ai mis dans userform_initialize. Normalement la boit n'est initialisée qu'une fois, ça économise du code ;)

J'ai également enlevé les TextBox_volume_ILN.Enabled et ai traité le pb avec des If.
Les TextBox_volume_ILN.Enabled sécurisent la saisie mais l'utilisateur peut ne pas comprendre ce qui se passe.
Ou bien j'utiliserai plutot TextBox_volume_ILN.Visible. Ca apparait quand on choisit.


Option Explicit

Private Sub userform_initialize()
Dim c
For Each c In Rows(16).SpecialCells(xlCellTypeConstants, 23)
If c.Value <> "" Then ComboBox_ILN_choisis.AddItem c.Value
Next
End Sub

Private Sub ajouter_volume_ILN_Click()
Dim PlageILN2 As Range
Dim RangeObj As Range
If ComboBox_ILN_choisis = "" Then MsgBox "Il faut selectionner une valeur": Exit Sub
With Sheets("Synthèse")
Set PlageILN2 = .Range(.Cells(16, 2), .Cells(16, .Cells(17, 256).End(xlToLeft).Column))
End With
Set RangeObj = PlageILN2.Find(What:=ComboBox_ILN_choisis.Text, LookIn:=xlValues, LookAt:=xlPart)
If RangeObj Is Nothing Then
MsgBox "ILN non ajouté, veuillez le créer dans le formulaite variable générale"
Else
If TextBox_volume_ILN = "" Then MsgBox "Il n'y a pas de volume saisi !" Else RangeObj.Offset(2, 0).Value = TextBox_volume_ILN
End If
End Sub


Sinon, tu peux aussi faire comme ceci pour la liste :

Dim c
ComboBox_ILN_choisis.Clear
For Each c In Rows(16).SpecialCells(xlCellTypeConstants, 23)
If c.Value <> "" Then ComboBox_ILN_choisis.AddItem c.Value
Next

NB - tu ne déranges personne.
Le principe du forum c'est justement de pouvoir choisir les sujets auxquels on répond ;)
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Problème avec fonction rechercheh en vba

Re,

Oui ...
RangeObj.Offset(2, 0).Value = RangeObj.Offset(2, 0).Value + TextBox_volume_ILN
... ça fonctionne.

Mais il faut sans doute gérer l'effacement de la TextBox dans la foulée ou fermer le UserForm.
Si un acharné appuie plusieurs fois sur "Ajouter ce volume" les résultats vont être rigolos ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 538
Messages
2 089 404
Membres
104 160
dernier inscrit
dqldq