vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Nanouna

XLDnaute Nouveau
Bonjour à tous,

J'ai deux tableaux: "affaires" et "actions", chacun sur un onglet
Pour Affaires, c'est à peu près OK, j'ai mon form de saisie et mon form de Visualisation.
Mais pour Action, j'ai un problem: actuellement mon code me permet d'insérer des lignes à mon tableau mais sans contrainte et je souhaiterais qu'il integer les données à des endroits différents selon que le n0 d'affaire existe déjà ou pas dans le tableau.
je m'explique.
Dans mon Form 'Visualiser les affaires", j'ai créer un lien pour insérer une action sur cette affaire.
Le n° de l'affaire apparaît automatiquement dans le nouveau Form Saisie d'actions.
Une fois completées les infos sur cette action, en cliquant sur enregistrer, je souhaite que
-si l'affaire existe déjà dans le tableau action, il inscrive les données sur la meme ligne que la cellule où se trouve le n° d'action
-si l'affaire n'existe: il crée une nouvelle ligne.

Je vous joins mon fichier. Veuillez excuser le code u peu brouillon , je suis debutante.

merci d'avance pour votre aide.
 

Pièces jointes

  • Test VBA.xlsm
    137.8 KB · Affichages: 115
  • Test VBA.xlsm
    137.8 KB · Affichages: 102
  • Test VBA.xlsm
    137.8 KB · Affichages: 106

Robert

XLDnaute Barbatruc
Repose en paix
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonjour Nanouna et bienvenue, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai utilisé des plages nommées pour les listes avec la fonction DECALER (voir le gestionnaire de noms). Cela permet d'alimenter dynamiquement les comboboxes qui font référence à ces listes et supprimer la propriété RowSource en dur et pas toujours fiable.
J'ai remanié la présentation du l'UserForm2 et ajouter une valeur à la propriété Tag des comboboxes et textboxes qui correspond à la colonne où se trouve la valeur correspondante dans le tableau. Cela permet d'alléger le code en bouclant (voir ComboBox6_Change()).
Enfin pour ton problème, je te propose le code ci-dessous :
Code:
Private Sub CommandButton1_Click() 'bouton "Enregister l'action"
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim li As Integer 'déclare la variable li (LIgne)

With Sheets("Actions")
    dl = .Cells(Application.Rows.Count, 4).End(xlUp).Row + 1 'définit la dernière ligne éditée dl de la colonne 4 (=D)
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
    Set r = pl.Find(Me.ComboBox65.Value, , xlValues, xlWhole) 'définit la recherche r
    'si il existe au moins une occurrence, la variable li est ágale à la ligne de l'occurrence trouvé, sinon elle est égale à dl
    If Not r Is Nothing Then li = r.Row Else li = dl + 1
    If MsgBox("Enregistrer l'action en cours?", vbOK, "Créer Action") = vbOK Then
        .Range("A" & li) = ComboBox65
        .Range("B" & li) = ComboBox1
        .Range("C" & li) = ComboBox2
        .Range("D" & li) = ComboBox3
        .Range("E" & li) = TextBox4
        .Range("F" & li) = TextBox3
        .Range("G" & li) = ComboBox4
        .Range("H" & li) = TextBox2
    End If
End With
ActiveWorkbook.Save
End Sub

Le fichier :
 

Pièces jointes

  • Nanouna_v01.xlsm
    83.5 KB · Affichages: 179

Nanouna

XLDnaute Nouveau
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonsoir Robert,

Tout d'abord un grand merci pour ton aide.
Je réponds un peu tard, désolée, je suis partie quelques jours en vacances, sans Internet , mais avec mon ordi quand meme.
Merci pour les "Frames"( c'est beaucoup + agréable à voir) et le gestionnaire de noms . pas besoin de changer mes Rowsources quand je modifierai mes listes;)

Pour le problem du tableau Actions à alimenter à la ligne suivante ou dans les colonnes de droite, j'ai essayé ton code mais ça écrase mes données (la deuxième action écrase la première).

Mais comme il ne faisait pas beau en vacances, j'ai trouvé ça (une partie vient de mon beau- frère j'avoue)

With Sheets("Actions")

Set columnAffaire = .Columns(1)
Set c = columnAffaire.Find(ComboBox65.Value, LookIn:=xlValues)

If MsgBox("Enregistrer l'action en cours?", vbOK, "Créer Action") = vbOK Then




If c Is Nothing Then

Der_lig = .Range("D65000").End(xlUp).Row + 1
.Range("A" & Der_lig) = ComboBox65
.Range("B" & Der_lig) = ComboBox1
.Range("C" & Der_lig) = ComboBox2
.Range("D" & Der_lig) = ComboBox3
.Range("E" & Der_lig) = TextBox4
.Range("F" & Der_lig) = TextBox3
.Range("G" & Der_lig) = ComboBox4
.Range("H" & Der_lig) = TextBox2
.Range("I" & Der_lig) = 1
.Range("J" & Der_lig) = TextBox46
.Range("JA" & Der_lig) = ComboBox66

Else
adresscell = c.Address
Range(adresscell).Activate

lineNb = c.Row
Do While Not (IsEmpty(ActiveCell)) 'Cherche la première colonne vide
NbColumn = NbColumn + 1
Selection.Offset(0, 1).Select

Loop

colNb = ActiveCell.Column
'lineNb = ActiveCell.Line

.Cells(lineNb, colNb) = ComboBox65
.Cells(lineNb, colNb + 1) = ComboBox1
.Cells(lineNb, colNb + 2) = ComboBox2
.Cells(lineNb, colNb + 3) = ComboBox3
.Cells(lineNb, colNb + 4) = TextBox4
.Cells(lineNb, colNb + 5) = TextBox3
.Cells(lineNb, colNb + 6) = ComboBox4
.Cells(lineNb, colNb + 7) = TextBox2
.Cells(lineNb, colNb + 8) = WorksheetFunction.Floor(colNb / 8, 1) + 1 'Donne le numérotation de l'action
.Cells(lineNb, colNb + 7) = TextBox46
.Cells(lineNb, "JA") = ComboBox66
End If



End If



End With
End If
ActiveWorkbook.Save
Unload Me


End Sub

Ca marche, je te joins le fichier avec de nouvelles fonctions :) , je n'ai pas encore fait les modifs que tu m'as proposé pour le gestionnaire de noms et les Frames, mais ce sera fait dès demain.

Merci encore,

Nanouna
 

Pièces jointes

  • Test VBA1601.xlsm
    110 KB · Affichages: 105

Nanouna

XLDnaute Nouveau
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonsoir Robert,

J'ai nommé mes listes de façon dynamique comme tu l'as fait et est inséré ton code dans mon programme, mais ça me donne: Erreur d'execution 70 : Permission refuse.

Sais-tu pourquoi ?

Merci,

Nanouna
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonsoir Nanouna, bonsoir le forum,

Oui, c'est parce que tu as oublié de vider la propriété RowSource des contrôles. C'est incompatible d'avoir une propriété RowSource et vouloir alimenter dynamiquement avec ComboBox1.list = Range("ma_plage).Value...
 

Nanouna

XLDnaute Nouveau
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonsoir Robert,


ENcore une questions sur les modifs que tu m'as conseillé: les tags.
J'ai numeroté mes ctrl dans la propriété tags et copié ton code, mais le système me dit: erreur d'execution 424 : objet requis.
Dois-je spécifier dans les tags, la feuille à laquelle le ctrl se réfère ou est-ce un problem de declarations dans le code stp?

Merci d'avance,

Nanouna
 

Pièces jointes

  • SCR1901.xlsm
    124.4 KB · Affichages: 70

Robert

XLDnaute Barbatruc
Repose en paix
Re : vba rechercher valeur saisie dans un combobox dans un tableau et definir action

Bonsoir Nanouna, bonsoir le forum,

Le code fonctionne mais il y a des règles à respecter... Les déclararions de variable Private doivent figurer en tête du module avant les procédures qui les utilisent. Il te suffit donc de faire un couper/coller de la ligne :
Code:
Private oaf As Object 'déclare la variable oaf (Onglet AFfaires)
pour la coller en première ligne de tes codes et tu verras ça ira beaucoup mieux...
 

Discussions similaires

Statistiques des forums

Discussions
312 282
Messages
2 086 767
Membres
103 390
dernier inscrit
BMatoul