VBA Excel: sélection et copie de colonnes

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
Configuration: Windows Vista
Firefox 3.0.

2 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    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+
    0
    1. TheMoon
       
      Bonjour, et merci pour ton aide

      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,
      0
  2. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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 :

    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+
    0
    1. TheMoon
       
      Merci beaucoup, ça marche très bien, je vais regarder cette syntaxe pour ne pas refaire la même erreur.
      0