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 Sub

Bonjour 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 Sub

Grand 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 Sub

Bonjour 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 Sub

Merci 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 Sub

je n'arrive pas à changer avec le nouveau code.

Dsl je début en vba c'est compliqué la.

UP!! merci

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 Sub

Autant 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 Sub

mais 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.

Impec!! ty

Rechercher des sujets similaires à "macro copie colonnes"