Modification cellules suivant conditions (VBA)

Tomd

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai modifier des cellules suivant une condition ( apparition d'une valeur dans la première colonne). Lorsque cette condition apparait modifier les cellules sur la ligne ou apparait la valeur recherché.
Si cette condition n'est pas rempli, créer une nouvelle ligne avec modifications des cellules 1,2,3,...

Actuellement avec la macro que j'ai crée lorsque la valeur apparait. La cellule de la première colonne disparait au profit du numéro de ligne ou elle se trouvait. Et une nouvelle ligne apparait en reprenant les informations modifié.

Lorsque la condition n'apparait pas j'ai erreur 91. Car la condition n'est pas rempli or je souhaiterai créer une ligne.

La macro se lance au travers d'un bouton et les informations sont transmissent grâce à un userform.
 

Pièces jointes

  • test.xlsm
    68.7 KB · Affichages: 52
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

Essaies ceci
Code:
Private Sub CommandButton1_Click()

Dim supplier As String
supplier = Worksheets("supplier form").Range("B1")

Dim Z As Range
  
Sheets("informations").Activate
Set Z = [A3:A1048576].Find(what:=supplier)
  
If Not Z Is Nothing Then
    Ligne = Z.Row
Else
    Ligne = Range("A1048576").End(xlUp).Offset(1, 0).Row
End If

   'Z = [A3:A1048576].Find(what:=supplier, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows).Row
  
    Cells(Ligne, 1) = Worksheets("supplier form").Range("B1").Value
    Cells(Ligne, 2) = Worksheets("supplier form").Range("F1").Value
    Cells(Ligne, 3) = TextBox1.Value
    Cells(Ligne, 4) = TextBox2.Value
    Cells(Ligne, 5) = TextBox3.Value
    Cells(Ligne, 6) = TextBox4.Value
    Cells(Ligne, 7) = TextBox5.Value
    Cells(Ligne, 8) = TextBox6.Value
    Cells(Ligne, 9) = TextBox7.Value
    Cells(Ligne, 10) = TextBox8.Value
    Cells(Ligne, 11) = TextBox9.Value

Sheets("Supplier Form").Activate
  
End Sub
 

Tomd

XLDnaute Nouveau
Bonjour,

Merci beaucoup vgendron ta solution fonctionne très bien.

J'ai un autre soucis je souhaiterai à l'ouverture de la macro afficher dans les text box / combobox la valeur dans ma base de données.
J'ai également deux combo box dont je souhaiterai définir les valeurs.

Puis-je faire une seul macro ou je dois diviser en 2 voir +?

Pour l'instant j'ai ceci:

Code:
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Riri"
ComboBox1.AddItem "Fifi"
ComboBox1.AddItem "Loulou"
End Sub

Private Sub UserForm_Initialize()
ComboBox1.AddItem "1"
ComboBox1.AddItem "2"
ComboBox1.AddItem "3"
End Sub

Private Sub UserForm_Activate()
   
Dim supp As String
supp = Worksheets("supplier form").Range("B1")

    Dim Z As Range
Sheets("informations").Activate
Set Z = [A3:A1048576].Find(what:=supp)
ligne = Z.Row

   'Z = [A3:A1048576].Find(what:=supp, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows).Row
  
  
TextBox1 = Cells(ligne, 3).Value
TextBox2 = Cells(ligne, 4).Value
TextBox3 = Cells(ligne, 5).Value
TextBox4 = Cells(ligne, 6).Value
ComboBox1 = Cells(ligne, 9).Value
ComboBox2 = Cells(ligne, 10).Value
TextBox5 = Cells(ligne, 7).Value
TextBox6 = Cells(ligne, 8).Value
TextBox10 = Cells(ligne, 11).Value
TextBox11 = Cells(ligne, 14).Value
TextBox12 = Cells(ligne, 15).Value
TextBox13 = Cells(ligne, 16).Value
TextBox14 = Cells(ligne, 12).Value
TextBox15 = Cells(ligne, 13).Value


Sheets("Supplier Form").Activate

  
End Sub
 

vgendron

XLDnaute Barbatruc
il faudrait que tu renvoies ton fichier qui contient ces fameux combobox..
et expliquer quelles sont les données que tu saisies et ou..

je présume qu'à l'ouverture du formulaire
tu vas sélectionner un nom dans un combobox (initialisé avec les noms déja existants)
ensuite, automatiquement, le formulaire va chercher les données déjà remplies
puis tu pourras modifier des valeurs. et au clic "bouton modifier", la base se met à jour avec les nouvelles data..
 

Tomd

XLDnaute Nouveau
Le combo box 1 va devoir afficher les données suivantes :'Key and rating system'!E2:E13;
Le combo box 2 va devoir afficher les données suivantes : 'Key and rating system'!G2:G4;
 

Pièces jointes

  • test.xlsm
    70 KB · Affichages: 55

vgendron

XLDnaute Barbatruc
'Key and rating system'!E2:E13;
??? c'est ou ca?

et dans ton code. je vois plusieurs fonction initialize et du activate..
une seule suffit.. d'ailleurs. sinon ca plante.
à partir du moment ou tu fais un formulaireshow, tu l'initialises. et c'est tout..

de plus, je ne comprend pas ce que sont tes combobox.. tu les initialises avec les suppliers..

regarde le code ci joint
Code:
Private Sub UserForm_Initialize()
'on récupère le supplier en B1
supplier = Worksheets("supplier form").Range("B1")
' et on rempli les Textbox et combo avec les data de la feuille informations
With Sheets("informations")
    Set Z = .[A3:A1048576].Find(what:=supplier)
    If Not Z Is Nothing Then
        Ligne = Z.Row
        TextBox1 = .Cells(Ligne, 3)
        TextBox2 = .Cells(Ligne, 4)
        TextBox3 = .Cells(Ligne, 5)
        TextBox4 = .Cells(Ligne, 6)
        TextBox5 = .Cells(Ligne, 7)
        TextBox6 = .Cells(Ligne, 8)
        ComboBox1 = .Cells(Ligne, 9).Value
        ComboBox2 = .Cells(Ligne, 10).Value
        TextBox7 = .Cells(Ligne, 11)
        TextBox8 = .Cells(Ligne, 12)
        TextBox9 = .Cells(Ligne, 13)
    Else
        MsgBox "supplier inexistant, va donc être créé"
    End If
End With
End Sub
Private Sub CommandButton2_Click()
    'pour quitter le userform
    Unload Me
End Sub

Private Sub CommandButton1_Click()
'clic sur bouton "modifier"
Dim supplier As String
Dim Z As Range
   
'on récupère le nom du supplier en B1
supplier = Worksheets("supplier form").Range("B1")
With Sheets("informations")
    Set Z = .[A3:A1048576].Find(what:=supplier)
    's'il existe déjà, on récupère sa ligne
    If Not Z Is Nothing Then
        Ligne = Z.Row
    'sinon on se place à la fin
    Else
        Ligne = .Range("A1048576").End(xlUp).Offset(1, 0).Row
    End If
   
    'on recopie les textbox dans la feuille Informations
    .Cells(Ligne, 1) = Worksheets("supplier form").Range("B1").Value
    .Cells(Ligne, 2) = Worksheets("supplier form").Range("F1").Value
    .Cells(Ligne, 3) = TextBox1.Value
    .Cells(Ligne, 4) = TextBox2.Value
    .Cells(Ligne, 5) = TextBox3.Value
    .Cells(Ligne, 6) = TextBox4.Value
    .Cells(Ligne, 7) = TextBox5.Value
    .Cells(Ligne, 8) = TextBox6.Value
    .Cells(Ligne, 9) = TextBox7.Value
    .Cells(Ligne, 10) = TextBox8.Value
    .Cells(Ligne, 11) = TextBox9.Value
End With
   
End Sub
 

vgendron

XLDnaute Barbatruc
correctif pour les correspondances Text Box - Lignes
et . pourrais tu mettre un formulaire sans le message d'erreur qui apparaissait quand tu as fait l'impression d'écran.. c'est pas joli du tout et ca aide pas à se concentrer sur l'essentiel

Code:
'*******************************
Private Sub UserForm_Initialize()

'on récupère le supplier en B1
supplier = Worksheets("supplier form").Range("B1")
' et on rempli les Textbox et combo avec les data de la feuille informations
With Sheets("informations")
    Set Z = .[A3:A1048576].Find(what:=supplier)
    If Not Z Is Nothing Then
        Ligne = Z.Row
        TextBox1 = .Cells(Ligne, 3)
        TextBox2 = .Cells(Ligne, 4)
        TextBox3 = .Cells(Ligne, 5)
        TextBox4 = .Cells(Ligne, 6)
        TextBox5 = .Cells(Ligne, 7)
        TextBox6 = .Cells(Ligne, 8)
        ComboBox1 = .Cells(Ligne, 9).Value
        ComboBox2 = .Cells(Ligne, 10).Value
        TextBox7 = .Cells(Ligne, 11)
        TextBox8 = .Cells(Ligne, 12)
        TextBox9 = .Cells(Ligne, 13)
    Else
        MsgBox "supplier inexistant, va donc être créé"
    End If
End With
End Sub
Private Sub CommandButton2_Click()
    'pour quitter le userform
    Unload Me
End Sub

Private Sub CommandButton1_Click()
'clic sur bouton "modifier"
Dim supplier As String
Dim Z As Range
   
'on récupère le nom du supplier en B1
supplier = Worksheets("supplier form").Range("B1")
With Sheets("informations")
    Set Z = .[A3:A1048576].Find(what:=supplier)
    's'il existe déjà, on récupère sa ligne
    If Not Z Is Nothing Then
        Ligne = Z.Row
    'sinon on se place à la fin
    Else
        Ligne = .Range("A1048576").End(xlUp).Offset(1, 0).Row
    End If
     On Error Resume Next
    'on recopie les textbox dans la feuille Informations
    .Cells(Ligne, 1) = Worksheets("supplier form").Range("B1").Value
    .Cells(Ligne, 2) = Worksheets("supplier form").Range("F1").Value
    .Cells(Ligne, 3) = TextBox1.Value
    .Cells(Ligne, 4) = TextBox2.Value
    .Cells(Ligne, 5) = TextBox3.Value
    .Cells(Ligne, 6) = TextBox4.Value
    .Cells(Ligne, 7) = TextBox5.Value
    .Cells(Ligne, 8) = TextBox6.Value
    .Cells(Ligne, 9) = ComboBox1.Value
    .Cells(Ligne, 10) = ComboBox2.Value
    .Cells(Ligne, 11) = TextBox7.Value
    .Cells(Ligne, 12) = TextBox8.Value
    .Cells(Ligne, 13) = TextBox9.Value
End With
   
End Sub
 

Tomd

XLDnaute Nouveau
et . pourrais tu mettre un formulaire sans le message d'erreur qui apparaissait quand tu as fait l'impression d'écran.. c'est pas joli du tout et ca aide pas à se concentrer sur l'essentiel

A vrai dire c'était pour cacher le nom de la société :confused: désolé

??? c'est ou ca?

Oui c'est vrai j'ai oublié de faire apparaitre cet feuille dans mon fichier.

Pour le combobox je peux faire apparaitre ?
Code:
Worksheets("A").Range("B1:B")

ComboBox1.RowSource = A

(c'est un exemple)

Désolé de te prendre autant de temps mais je tiens à te dire que tu m'a déjà beaucoup beaucoup (énormément) fais avancé. Un grand merci !!!
 

vgendron

XLDnaute Barbatruc
Je viens de tomber sur ton autre post (sans réponse) dans lequel tu avais mis tous tes formulaires..
ca aurait été bien de rester sur ce post..
et pour ton combo
pourquoi ne pas rester avec la solution que tu avais et qui fonctionnait bien?
Code:
ComboBox1.ColumnCount = 1
Set Ws = Sheets("Suppliers DATA")
With Me.ComboBox1
    For j = 5 To Ws.Range("A" & Rows.Count).End(xlUp).Row
        .AddItem Ws.Range("A" & j)
    Next j
End With

à placer dans l'initialize du formulaire
 

Tomd

XLDnaute Nouveau
Je viens de tomber sur ton autre post (sans réponse) dans lequel tu avais mis tous tes formulaires..
ca aurait été bien de rester sur ce post..
et pour ton combo
pourquoi ne pas rester avec la solution que tu avais et qui fonctionnait bien?

A vrai dire le fichier a été énormément modifié depuis ce post est il n'est donc plus d'actualité.

et j'ai uniquement besoin de 6 7 valeurs pour les combo box donc je ne souhaite pas repartir en ce sens.

Je vais tester plusieurs possibilité
 

vgendron

XLDnaute Barbatruc
et j'ai uniquement besoin de 6 7 valeurs pour les combo box donc je ne souhaite pas repartir en ce sens.
et donc, tu souhaites intialiser le combo direct dans la macro sans aller chercher les valeurs dans une feuille..?

dans ce cas. tu avais déjà la solution, mais pas à la bonne place
Code:
Private Sub UserForm_Initialize()
'initialisation du combobox1
ComboBox1.AddItem "Riri"
ComboBox1.AddItem "Fifi"
ComboBox1.AddItem "Loulou"
'etc etc

'on récupère le supplier en B1
supplier = Worksheets("supplier form").Range("B1")
' et on remplit les Textbox et combo avec les data de la feuille informations
With Sheets("informations")
    Set Z = .[A3:A1048576].Find(what:=supplier)
    If Not Z Is Nothing Then
        Ligne = Z.Row
        TextBox1 = .Cells(Ligne, 3)
        TextBox2 = .Cells(Ligne, 4)
        TextBox3 = .Cells(Ligne, 5)
        TextBox4 = .Cells(Ligne, 6)
        TextBox5 = .Cells(Ligne, 7)
        TextBox6 = .Cells(Ligne, 8)
'suis pas sur que ca ne va pas planter, vu que le combo a été initialisé juste avant. à essayer
        ComboBox1 = .Cells(Ligne, 9).Value
        ComboBox2 = .Cells(Ligne, 10).Value
        TextBox7 = .Cells(Ligne, 11)
        TextBox8 = .Cells(Ligne, 12)
        TextBox9 = .Cells(Ligne, 13)
    Else
        MsgBox "supplier inexistant, va donc être créé"
    End If
End With
End Sub
 

Discussions similaires

Réponses
2
Affichages
136

Statistiques des forums

Discussions
312 412
Messages
2 088 196
Membres
103 763
dernier inscrit
p.michaux