Macro vba exporter des colonnes selon titres

RomainG -  
 Utilisateur anonyme -
Bonjour,

Je souhaite créer une macro vba qui séléctionnera des colonnes d'une feuil1 pour les copier dans une feuil2 selon le titre qu'ils ont dans la feuil1. (J'appel titre une chaine de caractère situé dans une solonne (pas nécessairement dans la cellule la plus haute, mais une cellule au hasard).

Ademttons que j'ai une feuil1 comportant 10 colonnes avec 10 titres de types (titre 1 _ titre 2 .....jusqu'à titrre 10" et que dans ma colonne 2 je souaite obtenir titre 5 et titre 7.

Voilà ce que j'ai écris jusqu'à présent mais je ne pense pas avoir la bonne méthode, merci à ceux qui voudront bien m'aider.

sub rassemblement ()
Dim derL As Long
derL = Sheets("feuil1").[B65536].End(xlUp).Row
Dim derC As Long
derColonne=Sheets("feuil1").[B65536].End(xlUp).Column
Dim derLigne As Long
derLigne = Sheets("feuil2").[B65536].End(xlUp).Row

For i = derLigne To 1 Step -1
For j = derColonne to 1 step -1

If Feuil1.cells(i,j)= "titre5" then j= "Bontitre"
Cells(i, Bontitre) = Feuil2.Cells(i,1)

If Feuil.cells(i,j)="titre7" then j="Bontitre2"
Cells(i,Bontitre2)=Feuil2.Cells(i,2)

Next
Next

End sub
Cordialement

RomainG

7 réponses

  1. RomainG
     
    Voilà une macro plus "logique" mais qui ne marche toujours pas
    Meric encore à ceux qui voudront bien prendre le temps de se pencher sur mon problème.

    Sub rassemblement()
    Dim derL As Long
    derL = Sheets("feuil1").[B65536].End(xlUp).Row
    Dim derC As Long
    derColonne = Sheets("feuil1").[B65536].End(xlUp).Column

    For j = derC To 1 Step -1
    For i = derL To 1 Step -1
    If Feuil1.Cells(i, j) = "titre5" Then j = "Bontitre"
    Next
    Cells(i, 1) = Feuil1.Cells(i, Bontitre)
    Next

    For j = derC To 1 Step -1
    For i = derL To 1 Step -1
    If Feuil1.Cells(i, j) = "titre5" Then j = "Bontitre"
    Next
    Cells(i, 2) = Feuil1.Cells(i, Bontitre)
    Next

    End Sub

    RomainG
    0
  2. Utilisateur anonyme
     
    Bonjour,

    Je n'ai pas testé le résultat, mais la syntaxe :

    Option Explicit
    
    Sub rassemblement()
    
        Dim derL As Long
        Dim derC As Long
        Dim j As Long, i As Long
        Dim Position As Long
        
        derL = Sheets("feuil1").Range("B65536").End(xlUp).Row
        derC = Sheets("feuil1").Range("IV1").End(xlToLeft).Column
        
        MsgBox derL & vbCrLf & derC
    
        For j = derC To 1 Step -1
            For i = derL To 1 Step -1
                If Feuil1.Cells(i, j) = "titre5" Then
                    Position = j
                End If
            Next
            Cells(i, 1) = Feuil1.Cells(i, Position)
        Next
    
        For j = derC To 1 Step -1
            For i = derL To 1 Step -1
                If Feuil1.Cells(i, j) = "titre7" Then
                    Position = j
                End If
            Next
            Cells(i, 2) = Feuil1.Cells(i, Position)
        Next
    
    End Sub
    '
    


    Cdt

    Lupin
    0
  3. RomainG
     
    Bonjour Lupin et merci de ton aide.
    Les boucles ne se lancent pas et une boite de dialogue s'ouvre "erreur s'execution 1004. Erreur définie par l'application ou par l'objet".
    Il semblerait qu'il y'ait une faute de syntaxe dans la boucle mais je ne vois pas laquelle.

    Merci encore

    Cdt

    RomainG
    0
  4. Utilisateur anonyme
     
    Bonjour,

    L'erreur 1004 est une erreur de débordement.

    derL = Sheets("feuil1").Range("B65536").End(xlUp).Row
    derC = Sheets("feuil1").Range("IV1").End(xlToLeft).Column

    MsgBox derL & vbCrLf & derC

    Quels sont les deux valeurs envoyé par le MsgBox ?

    Cdt

    Lupin
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RomainG
     
    Ce sont deux valeurs :le nombre de ligne puis de colonne.

    Cdt

    RomainG
    0
  7. Utilisateur anonyme
     
    re:

    Ça je m'en doutais, mais les valeurs sont elles plausible ?

    Tu peux suivre le déroulement de la procédure en mode pas à pas
    et placer des espions sur les valeurs.

    // Menu // Outils // Macro // Macro ... //

    Sélectionner la macro à lancer

    Cliquer sur le bouton [Pas à pas détaillé]

    Clique droit sur la barre de menu, ajouter la barre de Débogage

    Utiliser le 6ième icon de la barre pour avancer en mode pas à pas

    Pour visualiser une variable, surligner la, clique droit dessus

    Choisir [Ajouter un espion ...]

    La fenêtre Espion apparait automatiquement

    Avancer pas à pas, la valeur de la variable est affiché de façon
    vivante ...

    Cdt

    Lupin
    0
  8. Utilisateur anonyme
     
    re:

    Voilà, j'ai débogger le code :

    L'erreur de débordement était du au fait d'utiliser [ i ] à la sortie
    de la boucle, à ce moment [ i ] vaut 0, et l'instruction Cells(x,y)
    ne supporte pas la position 0.

    Option Explicit
    
    Sub rassemblement()
    
        Dim derL As Long
        Dim derC As Long
        Dim j As Long, i As Long
        Dim Position As Long
        
        derL = Sheets("feuil1").Range("B65536").End(xlUp).Row
        derC = Sheets("feuil1").Range("IV1").End(xlToLeft).Column
        
        'MsgBox derL & vbCrLf & derC
    
        For j = derC To 1 Step -1
            For i = derL To 2 Step -1
                If Feuil1.Cells(i, j).Value = "titre5" Then
                    Position = j
                End If
            Next
            Sheets("Feuil1").Cells(i, 1).Value = Sheets("Feuil1").Cells(i, Position).Value
        Next
    
        For j = derC To 2 Step -1
            For i = derL To 1 Step -1
                If Feuil1.Cells(i, j).Value = "titre7" Then
                    Position = j
                End If
            Next
            Sheets("Feuil1").Cells(i, 2).Value = Sheets("Feuil1").Cells(i, Position).Value
        Next
    
    End Sub
    '
    


    Cdt

    Lupin
    0