Macro copie de colonnes
Bonjour,
Voilà, ça fait plusieurs jours que je n'arrive pas à faire ce que je souhaits, alors je me tourne vers vous.
J'ai 2 feuilles excel, sur la 1ere j'ai un tableau avec plusieurs lignes et colonnes, je souhaites via une macro copier ma colonne B et H à partir de la ligne 6 à indéterminé (en fonction des mois j'ai plus ou moins de lignes), et donc via cette macro sa me colle mon contenu sur ma feuille 2 en colonne D19 (pour B6, 1ere feuille) et F19 (pour H6, 1ere feuille)
J'ai un début de macro mais ça me copie les colonnes de B à H et non B et H.
Quelqu'un me m'aider svp?
Merci
Sub Reverse()
Dim i As Integer, DerLig As Long
With Sheets("1246")
For i = 1 To 2 Step 1
.Range(.Cells(9, i), .Cells(6, i + 1)).Copy
Sheets("Feuil1").Cells(4, 1 + i).PasteSpecial xlValues
Next i
End With
Sheets("Feuil1").Select
Range("A1").Select
End SubBonjour Nici, bonjour le forum,
Essaie comme ça :
Sub Reverse()
Dim DL As Long
With Sheets("1246")
DL = .Cells(Application.Rows.Count, 2).End(xlUp).Row
.Range("B6:B" & DL).Copy
Sheets("Feuil1").Range("D19").PasteSpecial (xlPasteValues)
DL = .Cells(Application.Rows.Count, 8).End(xlUp).Row
.Range("H6:H" & DL).Copy
Sheets("Feuil1").Range("F19").PasteSpecial (xlPasteValues)
End With
Sheets("Feuil1").Select
Range("A1").Select
End SubGrand merci, ça fonctionne très bien.
Bonjour,
Voilà j'ai un souci via ma combobox et mes TextBox, je l'explique :
j'ai actuellement 1 combobox et 2 TextBox, jusque là tout va bien, j'affiche se que je souhaits dans ma combobox et dans mon textbox1 mais dans mon textbox2 là problème je n'ai pas la bonne valeur souhaitée.
J'ai un tableau allant de la colonne A4 à K4, je ne me sers pour le moment que des colonnes A, B et H
Mon combobox1 me prends mes valeurs de la colonne A
Mon textbox1 me prends mes valeurs de la colonne B
Mon textbox2 devrai me prendre mes valeurs de la colonne H <- normalement
Mais là mon textbox2 me prends mes valeurs de la colonne C au lieu de H.
une idée? Merci.
'le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer
ComboBox1.ColumnCount = 1
Set Ws = Sheets("123")
With Me.ComboBox1
For J = 4 To Ws.Range("a" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("a" & J)
Next J
End With
For I = 1 To 2
Me.Controls("TextBox" & I).Visible = True
Next I
End Sub
'la liste déroulante
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 4
For I = 1 To 2
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I
End SubBonjour Nici, bonjour le forum,
Je pense que tu aurais dû créer un nouveau fil pour ce problème qui n'a rien à voir avec le précédent...
Tu boucles avec I comme variable :
For I = 1 To 2
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next Iça te donne :
I = 1 ==> TextBox1.value=Ws.Cells(Ligne, 3), soit la colonne C et pas B comme tu le dis !
I = 2 ==> TextBox2.value=Ws.Cells(Ligne, 4), soit la colonne D et pas H comme tu le voudrais !
Je te propose le code ci-dessous :
'le formulaire
Private Sub UserForm_Initialize()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim I As Byte 'déclare la variable I (Incrément)
ComboBox1.ColumnCount = 1 'pourquoi ne pas écrire dans propriété en dur ?
Set O = Sheets("123") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A4:A" & DL) 'définit la palge PL
Me.ComboBox1.List = PL.Value 'alimente la ComboBox1
'pourquoi ne pas mettre la propriété Visible de ces deux textboxes en dur ?
For I = 1 To 2
Me.Controls("TextBox" & I).Visible = True
Next I
End Sub
'la liste déroulante
Private Sub ComboBox1_Change()
Dim Ligne As Long 'déclare la variable Ligne
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 4 'définit la variable Ligne
Me.TextBox1.Value = O.Cells(Ligne, 2) 'récupère la valeur de la cellule en ligne : Ligne, colonne 2 (=B)
Me.TextBox2.Value = O.Cells(Ligne, 8) 'récupère la valeur de la cellule en ligne : Ligne, colonne 8 (=H)
End SubMerci de m'avoir répondu, je ne voulais pas trop spammer dans le forum donc j'ai mis à la suite.
Effectivement j'avais mis en dur certains éléments et j'ai oublié de les enlever de mon code ^^.
Sinon le code marche beaucoup mieux comme cela, j'ai du rajouter de mon côté une variable car une feuille car j'avais des erreurs de compilations.
Par contre j'ai oublié de copier le code de mon bouton de mofification qui est :
'bouton Modifier
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim I As Integer
If MsgBox("Confirmez-vous la modification d'item?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
Ws.Cells(Ligne, "B") = ComboBox2
For I = 1 To 9
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
End Subje n'arrive pas à changer avec le nouveau code.
Dsl je début en vba c'est compliqué la.
Bonjour,
Si ta question concerne le fait de démarrer en Colonne B ...
'bouton Modifier
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim I As Integer
If MsgBox("Confirmez-vous la modification d'item?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
Ws.Cells(Ligne, 2) = ComboBox2
For I = 1 To 9
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
End SubAutant pour moi j'ai complément oublié d'enlever mon combobox2 car il ne me sert plus, donc mon code est :
'bouton Modifier
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim I As Integer
If MsgBox("Confirmez-vous la modification d'item?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 2
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
End Submais je ne comprends pas car ça ne modifie rien si je reprends dans ma combobox1 les élèments qui sont dans mon tableau
J'ai trouvé, j'ai simplement remis ma viable O avec un value.
merci
ThauThème a écrit :'le formulaire Private Sub UserForm_Initialize() Dim O As Object 'déclare la variable O (Onglet) Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim PL As Range 'déclare la variable PL (PLage) Dim I As Byte 'déclare la variable I (Incrément) ComboBox1.ColumnCount = 1 'pourquoi ne pas écrire dans propriété en dur ? Set O = Sheets("123") 'définit l'onglet O DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O Set PL = O.Range("A4:A" & DL) 'définit la palge PL Me.ComboBox1.List = PL.Value 'alimente la ComboBox1 'pourquoi ne pas mettre la propriété Visible de ces deux textboxes en dur ? For I = 1 To 2 Me.Controls("TextBox" & I).Visible = True Next I End Sub 'la liste déroulante Private Sub ComboBox1_Change() Dim Ligne As Long 'déclare la variable Ligne If Me.ComboBox1.ListIndex = -1 Then Exit Sub Ligne = Me.ComboBox1.ListIndex + 4 'définit la variable Ligne Me.TextBox1.Value = O.Cells(Ligne, 2) 'récupère la valeur de la cellule en ligne : Ligne, colonne 2 (=B) Me.TextBox2.Value = O.Cells(Ligne, 8) 'récupère la valeur de la cellule en ligne : Ligne, colonne 8 (=H) End Sub
Dis moi, j'ai un petit souci au niveau de ce code, sur cette ligne :
Set PL = O.Range("A4:A" & DL)Je comprends qu'on ne définisse pas de fin au A, mais quand la copie dans mon tableau se fait se n'est qu'à partir de la 3ieme de mon tableau soit 2 lignes vides, je ne comprends pas pourquoi.