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

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Cdt

RomainG
0
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
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