VBA Excel: sélection et copie de colonnes
TheMoon
-
TheMoon -
TheMoon -
Bonjour,
Je suis débutant en VBA Excel, et j'ai un problème avec une macro devant tester la deuxième ligne de chaque colonne sur une feuille, et la coller, ainsi que la colonne suivante dans une autre feuille suivant la valeur lue.
J'ai essayé le code suivant pour sélectionner mes colonnes (je suis désolé si mon code manque de propreté):
If Cells(2, i).Value = 178.6 Then Range(ActiveCell, ActiveCell.End(xlDown)).Select , _
li = Selection.Rows.Count, Range(Cells(1, i), Cells(li, i + 1)).Select, _
Selection.Copy
Il s'avère qu'au moment de l'exécution, j'obtiens une erreur de compilation : "Nombre d'arguments incorrects ou affectation de propriété incorrecte" concernant le premier "Select".
Merci d'avance,
PS: J'avais déjà récupéré ce morceau de code sur ce site au cours de mes recherches, il est possible que je l'ai mal compris et mal adapté de ce fait.
TheMoon
Je suis débutant en VBA Excel, et j'ai un problème avec une macro devant tester la deuxième ligne de chaque colonne sur une feuille, et la coller, ainsi que la colonne suivante dans une autre feuille suivant la valeur lue.
J'ai essayé le code suivant pour sélectionner mes colonnes (je suis désolé si mon code manque de propreté):
If Cells(2, i).Value = 178.6 Then Range(ActiveCell, ActiveCell.End(xlDown)).Select , _
li = Selection.Rows.Count, Range(Cells(1, i), Cells(li, i + 1)).Select, _
Selection.Copy
Il s'avère qu'au moment de l'exécution, j'obtiens une erreur de compilation : "Nombre d'arguments incorrects ou affectation de propriété incorrecte" concernant le premier "Select".
Merci d'avance,
PS: J'avais déjà récupéré ce morceau de code sur ce site au cours de mes recherches, il est possible que je l'ai mal compris et mal adapté de ce fait.
TheMoon
A voir également:
- Vba sélectionner plusieurs colonnes
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Comment faire des colonnes sur word - Guide
- Selectionner texte sur pdf - Guide
- Inverser deux colonnes excel - Guide
- Comment sélectionner un message sur whatsapp pour y répondre - Guide
2 réponses
Bonjour,
Déja au niveau de la syntaxe il faut écrire ceci :
Ensuite il manque du code avant et aprés pour que l'on puisse juger si cela va donner le bon résultat. En particulier je suppose qu'il y a une boucle sur toutes les colonnes i et un paste ensuite. Mais l'utilisation de ActiveCell me parait curieux. Il me semble qu'il faudrait que la cellule active soit Cells(1,i) en amont de ce code.
A+
Déja au niveau de la syntaxe il faut écrire ceci :
If Cells(2, i).Value = 178.6 Then Range(ActiveCell, ActiveCell.End(xlDown)).Select li = Selection.Rows.Count Range(Cells(1, i), Cells(li, i + 1)).Select Selection.Copy End If
Ensuite il manque du code avant et aprés pour que l'on puisse juger si cela va donner le bon résultat. En particulier je suppose qu'il y a une boucle sur toutes les colonnes i et un paste ensuite. Mais l'utilisation de ActiveCell me parait curieux. Il me semble qu'il faudrait que la cellule active soit Cells(1,i) en amont de ce code.
A+
Bonjour,
Oui à priori c'est la syntaxe Columns(i, j).Select qui n'est pas correcte.
Il faut essayer cette syntaxe : Range(Columns(i), Columns(j)).Select
Je confirme que tu écrases chaque fois les valeurs.
Regardes un exemple de code qui fonctionne :
A+
Oui à priori c'est la syntaxe Columns(i, j).Select qui n'est pas correcte.
Il faut essayer cette syntaxe : Range(Columns(i), Columns(j)).Select
Je confirme que tu écrases chaque fois les valeurs.
Regardes un exemple de code qui fonctionne :
Sub test() Dim i As Integer, j As Integer, Numcol As Integer, Numcol2 As Integer Dim k As Integer, l As Integer k = 1 l = 1 For i = 1 To 150 Sheets("VIS-NIR").Select j = i + 1 Range("A1").Select Application.CutCopyMode = False If Cells(2, i).Value = "178,6" Then Range(Columns(i), Columns(j)).Select Selection.Copy Sheets("VIS").Select Cells(1, k).Select ActiveSheet.Paste k = k + 2 End If If Cells(2, i).Value = "646,42" Then Range(Columns(i), Columns(j)).Select Selection.Copy Sheets("NIR").Select Cells(1, l).Select ActiveSheet.Paste l = l + 2 End If Next i End Sub
A+
Le code a quelque peu évolué depuis ce post, c'est maintenant:
Sub test()
Dim i As Integer, j As Integer, Numcol As Integer, Numcol2 As Integer
For i = 1 To 150
Sheets("VIS-NIR").Select
j = i + 1
Range("A1").Select
Application.CutCopyMode = False
If Cells(2, i).Value = "178,6" Then
Columns(i, j).Select
Selection.Copy
Sheets("VIS").Select
Range("A1").Select
ActiveSheet.Paste
End If
If Cells(2, i).Value = "646,42" Then
Columns(i, j).Select
Selection.Copy
Sheets("NIR").Select
Range("A1").Select
ActiveSheet.Paste
End If
Next i
End Sub
J'y ajouterais une procédure permettant de ne pas copier constamment chaque nouvelle série de valeur sur les anciennes, mais ça ne me pose pas de problème, je l'ai déjà fait.
Mon soucis est donc que je voudrais copier deux colonnes dans un onglet différent en fonction de la valeur de la deuxième ligne de la première colonne. Le problème, c'est que là, j'obtiens une erreur d'exectution 1004 : "Erreur définie par l'application ou par l'objet". Le debugger me surligne la ligne de sélection des colonnes. J'ai essayé pas mal de choses, dont des trucs vraiment pas beaux à voir (et forcément totalement ineficaces), mais je n'arrive pas à voir où est le soucis.
Cordialement,