Insertion conditionnelle de colonnes

  • Initiateur de la discussion Initiateur de la discussion Newbe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

Newbe

Guest
Bonjour le Forum,
J'ai commencé à programmé une macro (avec votre aide) et je bloque sur un petit problème.
La procédure "Ajout" doit ajouter une colonne en plus (le resultat de la recherche) au range SEL si la recherche aboutit. Si la recherche n'aboutit pas je dois rajouter à SEL une colonne vide.

Voilà ce que j'ai commencé, j'ai mis en rouge les points sur lesquels je ne connais pas la syntaxe... Si quelqu'un peut m'orienter...🙂

Sub Ajout(donnée As String)
Dim i As Integer
Dim u As Range, col As Range

Set u = ActiveWorkbook.Sheets(1).Range("A1:Z1").Find(what:=donnée, lookat:=xlPart)
If Not u Is Nothing Then i = u.Column
col = Column(i)
SEL.Add col

Else
SEL.Add emptycolumn

End Sub
 
Re : Insertion conditionnelle de colonnes

Mais du coup chez moi pour ajouter la colonne au range SEL ça donnerait un truc du genre:
SEL.Insert col
c'est bien ça?
Et pour une colonne vide c'est bien EmptyColumn?
 
Re : Insertion conditionnelle de colonnes

Bonjour Newbe,

Salut Pierrot, je vois que, comme moi, l'énoncé du problème te laisse pensif, ce n'est pas clair.

Mais essayons toujours ceci :

Code:
Sub Ajout(donnee As String)
Dim u As Range
Set u = Sheets(1).Range("A1:Z1").Find(donnee, LookIn:=xlFormulas, LookAt:=xlPart)
ActiveCell.EntireColumn.Insert 'insert une colonne
If Not u Is Nothing Then u.EntireColumn.Copy ActiveCell.EntireColumn 'copie la colonne trouvée sur la colonne insérée
End Sub

Bien sûr cette macro ne peut être appelée que dans une autre macro avec une instruction du genre :

Code:
Call Ajout("toto")

A+
 
Re : Insertion conditionnelle de colonnes

Oui effectivement Job75, je viens de me rendre compte que je n'utilise pas du tout le bon objet.
En fait ce qu'il faudrait que j'arrive a faire c'est de rajouter la colonne à une sélection l'idée est d'utiliser plusieurs fois la procédure Ajout dans la macro principale pour sélectionner plusieurs colonnes distinctes et ensuite copier la sélection pour la coller dans une autre feuille. Je sais pas si ça vous parait plus clair. Voici la macro principale, elle n'est pas encore complète...

Sub Ajout(donnée As String)
Dim i As Integer
Dim u As Range, col As Range

Set u = ActiveWorkbook.Sheets(1).Range("A1:Z1").Find(what:=donnée, lookat:=xlPart)
If Not u Is Nothing Then i = u.Column
col = Column(i)
SEL.Add col

Else
SEL.Add emptycolumn

End Sub



Sub Tableau()

Dim A As String, B As String, C As String, D As String, E As String, F As String, G As String, H As String
Dim ActB As Boolean, ActC As Boolean, ActD As Boolean, ActE As Boolean, ActF As Boolean, ActG As Boolean, ActH As Boolean
Dim i As Integer, x As Integer
Dim Chemin As Variant, fs As Variant
Dim nomfichier As String, Fichierlu As String, Fenêtrelu As String

Chemin = ThisWorkbook.Path & "\Données\"
nomfichier = ActiveWorkbook.Name
A = "ISIN"
B = "LIB"
C = "%"
D = "DEV"
E = "PAYS"
F = "ZONE"
G = "SecteurN1"
H = "SecteurN2"

Set fs = Application.FileSearch
With fs
.LookIn = Chemin
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then


For i = 1 To .FoundFiles.Count
Fichierlu = .FoundFiles(i)
'fenêtrelue = ActiveWorkbook.Name

x = recherche(A, Fichierlu) 'Fonction qui ouvre le classeur et rend le numéro de la colonne contenant A sous forme d'entier

If x <> 0 Then

Cells(1, x).Column.Select

If ActB = True Then Ajout (B)
End If

If ActC = True Then Ajout (C)
End If

If ActD = True Then Ajout (D)
End If

If ActE = True Then Ajout (E)
End If

If ActF = True Then Ajout (F)
End If

If ActG = True Then Ajout (G)
End If

If ActH = True Then Ajout (H)
End If

Selection.Copy
Windows(nomfichier).Activate
Range("a65536").Select
Selection.End(x1Up).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste 'On colle la selection à la suite du reste dans le tableau principal
Else
ActiveSheet.Range("A" & i) = "pas trouvé, dans " & Fichierlu & _
". Veuillez formater ce fichier de nouveau."

End If
Next i
End If
End With


End Sub
 
Re : Insertion conditionnelle de colonnes

Bonjour,

A mon tour de tenter qqch...

Pour connaître une syntaxe, tu peux utiliser l'enregistreur de macro (dans ta barre d'outil Visual Basic, tu as un point rouge d'enregistrement).
Tu lances l'enregistrement, tu effectues l'opération sous Excel et dans un module tu va retrouver la syntaxe de ce que tu viens de faire...

Avec cette solution, ajouter une colonne en E s'écrit :
Columns("E:E").Select
Selection.Insert Shift:=xlToRight

Cela insère une colonne vide... Après tu peux la remplir si la condition est vérifiée...

Sinon le mieux c'est d'envoyer un bout de fichier avec ce que tu souhaites, parce que vu ton code je doute qu'il faille le tourner ainsi...
 
Re : Insertion conditionnelle de colonnes

Ce que j'aimerai faire simplement c'est rajouter à chaque fois une colonne de plus à ma selection. Je pense que c'est juste une synthaxe qu'il me manque...
 
Re : Insertion conditionnelle de colonnes

Re,

pour insérer une colonne devant la cellule trouvée :

Code:
Dim u As Range
Set u = ActiveWorkbook.Sheets(1).Range("A1:Z1").Find(what:=donnée, lookat:=xlPart)
If Not u Is Nothing Then
    Columns(u.Column).Insert
End If
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
411
  • Question Question
Réponses
6
Affichages
777
Retour