Copie d'une ligne en VBA
Salut le forum,
j'ai le problème suivant :
J'ai un code en VBA qui me permet d'enregistrer des données sur une feuille en repérant une valeur en colonne H identique à une autre valeur dans un label dans un USF.
Voici le code :
Private Sub BTNenreg_Click()
Dim ligne As String
If TextBox1.Text = "" Then
Exit Sub
ElseIf TextBox2.Text = "" Then
Exit Sub
End If
Range("Entrées!B1") = Label4.Caption
Range("Entrées!B2") = Label2.Caption
Range("Entrées!B3") = Label3.Caption
Range("Entrées!B5") = TextBox1.Text
Range("Entrées!B6") = TextBox2.Text
With Sheets("Calendrier")
ligne = Application.Match(Sheets("Entrées").[B4], .[H1:H500], 0)
.Cells(ligne, 1) = Sheets("Entrées").Cells(1, 2).Value
.Cells(ligne, 2) = Sheets("Entrées").Cells(2, 2).Value
.Cells(ligne, 3) = "vs"
.Cells(ligne, 4) = Sheets("Entrées").Cells(3, 2).Value
.Cells(ligne, 5) = Sheets("Entrées").Cells(5, 2).Value
.Cells(ligne, 6) = "-"
.Cells(ligne, 7) = Sheets("Entrées").Cells(6, 2).Value
.Cells(ligne, 8 ) = Sheets("Entrées").Cells(4, 2).Value
.Cells(ligne, 9) = Sheets("Entrées").Cells(7, 2).Value
Columns.EntireColumn.AutoFit
End With
With Sheets("Entrées")
.Range("B1:B3").ClearContents
.Range("B5:B6").ClearContents
End With
Unload USFresultat
USFresultat.Show
End Sub
Mon problème est qu'il peut y avoir plusieurs valeurs identiques en H et que ce code enregistre toujours sur la première ligne indiquant la valeur recherchée.
Ma solution est déjà incluse dans le fichier mais je ne sais pas comment l'exploiter. En colonne i, j'ai une validation avec 1 ou 0. J'aimerais insérer une ligne de code qui me dit que si la valeur de la colonne i est 0, on peut enregistrer sur cette ligne.
Ça me donnerait quelque chose du genre :
Private Sub BTNenreg_Click()
Dim ligne As String
If TextBox1.Text = "" Then
Exit Sub
ElseIf TextBox2.Text = "" Then
Exit Sub
End If
Range("Entrées!B1") = Label4.Caption
Range("Entrées!B2") = Label2.Caption
Range("Entrées!B3") = Label3.Caption
Range("Entrées!B5") = TextBox1.Text
Range("Entrées!B6") = TextBox2.Text
With Sheets("Calendrier")
ligne = Application.Match(Sheets("Entrées").[B4], .[H1:H500], 0)
et la valeur en colonne i = 0
.Cells(ligne, 1) = Sheets("Entrées").Cells(1, 2).Value
.Cells(ligne, 2) = Sheets("Entrées").Cells(2, 2).Value
.Cells(ligne, 3) = "vs"
.Cells(ligne, 4) = Sheets("Entrées").Cells(3, 2).Value
.Cells(ligne, 5) = Sheets("Entrées").Cells(5, 2).Value
.Cells(ligne, 6) = "-"
.Cells(ligne, 7) = Sheets("Entrées").Cells(6, 2).Value
.Cells(ligne, 8 ) = Sheets("Entrées").Cells(4, 2).Value
.Cells(ligne, 9) = Sheets("Entrées").Cells(7, 2).Value
Columns.EntireColumn.AutoFit
End With
With Sheets("Entrées")
.Range("B1:B3").ClearContents
.Range("B5:B6").ClearContents
End With
Unload USFresultat
USFresultat.Show
End Sub
J'espère avoir été assez clair.
Merci pour votre aide.
Salut le forum
Le titre aurait du être copier une ligne et non enregistrer une ligne.
Il existe une balise CODE pour le texte des macros.
Au-lieu Application.Match fait une recherche avec Find
Un lien https://forum.excel-pratique.com/viewtopic.php?t=6156&highlight=find
J'ai dejà fournit un code, pas envie de me batir, un Userform pour faire ta macro.
Il y a devin et devinette !
Mytå
Salut Mytå,
tu as raison, j'aurais dû fournir un fichier.
Je travaille sur la suggestion que tu m'as faite mais sans résultat jusqu'à présent.
D'ailleurs, voici le fichier avec quelques explications incluses.
J'ai désactivé le démarrage automatique des USF pour ne pas embarrasser inutilement la personne qui m'apportera son aide.
Salut le forum
Eric_F, ta macro modifiée avec la méthode Find
Private Sub BTNenreg_Click()
'Macro modifiée par Mytå pour Eric
'Forum Excel-pratique 05-Nov-2008
Dim ligne As Long
Dim PremCell As String
Dim Cell As Range
If TextBox1.Text = "" Then
Exit Sub
ElseIf TextBox2.Text = "" Then
Exit Sub
End If
Range("Entrées!B1") = Label4.Caption
Range("Entrées!B2") = Label2.Caption
Range("Entrées!B3") = Label3.Caption
Range("Entrées!B5") = TextBox1.Text
Range("Entrées!B6") = TextBox2.Text
With Sheets("Calendrier")
Set Cell = Cells.Find(Sheets("Entrées").[B4], LookIn:=xlValues, Lookat:=xlPart)
If Not Cell Is Nothing Then
PremCell = Cell.Address
Do
If Cell.Offset(0, -2) <> "-" Then Exit Do
Set Cell = Cells.FindNext(Cell)
Loop Until Cell.Address = PremCell
End If
ligne = Cell.Row
.Cells(ligne, 1) = Sheets("Entrées").Cells(1, 2).Value
.Cells(ligne, 2) = Sheets("Entrées").Cells(2, 2).Value
.Cells(ligne, 3) = "vs"
.Cells(ligne, 4) = Sheets("Entrées").Cells(3, 2).Value
.Cells(ligne, 5) = Sheets("Entrées").Cells(5, 2).Value
.Cells(ligne, 6) = "-"
.Cells(ligne, 7) = Sheets("Entrées").Cells(6, 2).Value
.Cells(ligne, 8) = Sheets("Entrées").Cells(4, 2).Value
.Cells(ligne, 9) = Sheets("Entrées").Cells(7, 2).Value
Columns.EntireColumn.AutoFit
End With
With Sheets("Entrées")
.Range("B1:B3").ClearContents
.Range("B5:B6").ClearContents
End With
Unload USFresultat
USFresultat.Show
End Sub
A te relire
Mytå
Tellement fort!!!
Je ne serais jamais parvenu à faire ça.
C'est super Mytå!
Merci beaucoup!