insérer des colonnes en vba !!!!

  • Initiateur de la discussion Initiateur de la discussion edjo123
  • 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 !

edjo123

XLDnaute Junior
bonjour

Je sais que ca peut paraître "bête" à certains comme question , mais ca fait deux jours que je planche la dessus

Voila mon problème, je demande à l'utilisateur de rentrer un nombre via une inputbox.Jusque là pas de pb

Ce que j'aimerais faire c'est insérer un nombre de colonnes correspondant au nombre rentré par l'utilisateur entre deux colonnes bien précises .

Quelqu'un pourrait il me proposer une solution ?

Merci d'avance
 
Re : insérer des colonnes en vba !!!!

Salut,

Par exemple:
Code:
Option Explicit

Sub InsertColonne()
    Dim NbrColonne As String
    
    NbrColonne = InputBox("Nombre de colonnes")
    
    If NbrColonne <> "" Then
        If IsNumeric(NbrColonne) Then
            Range("F1").Resize(, NbrColonne).EntireColumn.Insert Shift:=xlToRight
        End If
    End If
End Sub
 
Re : insérer des colonnes en vba !!!!

@ Minick
Merci beaucoup pour ta réponse. le code marche très bien

En fait finalement, j'avais mal posé mon pb. le pb est celui-ci.

1) je voudrais calculer le nombre de colonnes que j'ai entre deux plages de cellules précises. Ces plages de cellules correspondent en fait à deux colonnes.

2) Sachant le nombre de colonnes entre mes deux plages de cellules (colonnes), je voudrais ajuster automatiquement ce nombre au nombre choisi par un utilisateur (via une inputbox).

Exemple : Si entre la plage1 et la plage2, il y a trois colonnes et que l'utilisateur rentre 6, il faudrait qu'il m'insère automatiquement trois colonnes supplémentaires
De même si entre plage1 et plage2, il y a 10 colonnes et que l'utilisateur rentre 5, il faudrait qu'il me supprime automatiquement 5 colonnes.

J'espère que le problème est un peu plus clair cette fois

merci d'avance pour vos promptes réactions
 
Re : insérer des colonnes en vba !!!!

coucou Minick

ca marche nickel dans ton fichier mais dans le mien ca fait plus rien de bon !!!

Je te joins mon fichier pour que tu y jettes un oeil si tu as du tps.

1) La macro MalesPortfolio est sensee me dessiner sur la feuille "portfolio " un tableau aux dimensions que j'ai indiquées.

2) Elle doit par ailleurs m'inserer un certain nombre de colonnes entre les colonnes simulations et retention (pour l'instant les colonnes B et N) de la feuille. ce nombre de colonnes à inserer correspond a celui que j'ai indiqué àla crétaion de mon tableau

Voila j'espère que c'est un peu plus clair


voila le fichier tu peux jetter un oeil
 
Re : insérer des colonnes en vba !!!!

Ah la la dur dur le fichier est apparemment trop lourd malgré le zippage

ile ne me reste plus qu'à copier coller mon code :

Sub MalesPortfolio()

'********************Deleting the last registrement****************************************
Sheets("portfolio").Select
ActiveSheet.Range("B6:IV33").ClearContents
ActiveSheet.Range("B6:IV33").Select
'Sheets("portfolio").Range("B6:IV33").ClearContents
'Sheets("portfolio").Range("B6:IV33").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

'********************Recovery the informations of the portfolio size****************************

ligM = InputBox("Register the age ranges")
If ligM = "" Then
Exit Sub
Else
Do While ligM <= 0 Or ligM > 20
MsgBox (" 1: The number you registered is not valid. Choose a number between 1 and 20")
ligM = InputBox("Register the age ranges")
Loop
If ligM > 0 And ligM <= 20 Then
colM = InputBox("Register the sum at risk ranges")
If colM = "" Then
Exit Sub
Else
Do While colM <= 0 Or colM > 26
MsgBox (" 2: The number you registered is not valid. Choose a number between 1 and 26")
colM = InputBox(" 2:Register the sum at risk ranges ")
Loop
If colM > 0 And colM <= 26 Then

'********************Builing the portfolio shape****************************************

Range(Cells(6, 2), Cells(10 + ligM, 6 + colM)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(6, 2), Cells(10 + ligM, 3)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(6, 4), Cells(10 + ligM, 4)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(6, 5), Cells(10 + ligM, 5)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(6, 6 + colM), Cells(10 + ligM, 6 + colM)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(6, 2), Cells(7, 6 + colM)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(8, 2), Cells(8, 6 + colM)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range(Cells(9 + ligM, 2), Cells(9 + ligM, 6 + colM)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Cells(8, 2).Value = "Age Factor"
Cells(6, 5).Value = "SAR factor"
Cells(9 + ligM, 5).Value = "Total"
Cells(8, 6 + colM).Value = "Total"
Cells(10 + ligM, 5).Value = "Expected number of deaths by sum at risk"

'*************Formulas in cells****************************

End If
End If
End If
End If

'******************Simulations sheet ******************************


Sheets("simulations").Select
'For i = 3 To ligM + 2

'Dim NbrColonne As Variant
Dim NbrCololonneEntreBorne As Byte

Worksheets("simulations").Range("B1").Name = "BornePlage1"
Worksheets("simulations").Range("H1").Name = "BornePlage2"

'NbrColonne = InputBox("Nombre de colonnes")

If colM <> "" Then
If IsNumeric(colM) Then
colM = CByte(colM)
NbrCololonneEntreBorne = Range("BornePlage2").Column - Range("BornePlage1").Column - 1
If colM > NbrCololonneEntreBorne Then
Range("BornePlage2").Offset(, -1).Resize(, colM - NbrCololonneEntreBorne).EntireColumn.Insert Shift:=xlToRight

ElseIf colM < NbrCololonneEntreBorne Then
Range("BornePlage2").Offset(, -(NbrCololonneEntreBorne - colM)).Resize(, NbrCololonneEntreBorne - colM).EntireColumn.Delete
End If
End If
End If
End Sub
 
Re : insérer des colonnes en vba !!!!

re, pour la parti simulation corrige comme ceci:
Code:
NbrCololonneEntreBorne = Range("N1").Column - Range("B1").Column - 1
If colM > NbrCololonneEntreBorne Then
    Range("N1").Offset(, -1).Resize(, colM - NbrCololonneEntreBorne).EntireColumn.Insert Shift:=xlToRight

ElseIf colM < NbrCololonneEntreBorne Then
    Range("N1").Offset(, -(NbrCololonneEntreBorne - colM)).Resize(,  NbrCololonneEntreBorne - colM).EntireColumn.Delete
End If
 
Re : insérer des colonnes en vba !!!!

ca marche toujours pas 🙁

C'est en fait la "plage2" qui pose problème; les colonnes ne sont pas insérées au bon endroit. D'uen execution à une autre, le nombre de colonnes insérées n'est pas le bon

Prière de regrader une fois de plus

STP
 
Re : insérer des colonnes en vba !!!!

Regarde un peu ce fichier qui est une caricature du mien .

Il faut pouvoir inserer entre colonnedebut et colonnefin le nombre de colonnes spécifié par l'utilisateur.

Et surtout il faudrait que d'un appel de la macro à l'autre que les "calculs" d'insertion fait soient bon et que les colonnes insérees le soient à cet entre ces deux colonnes et pas ailleurs.

Or puisque d'une manip à l'autre colonnefin se deplace........... je ne sais vraiment pas comment faire

Thanks
 

Pièces jointes

Re : insérer des colonnes en vba !!!!

Regarde le classeur, j'ai nommé les cellule en vert (ColonneDebut et colonneFin)
et modfier le code en consequence.
Il faut les nommés pour toujours savoir ou elle sont, si tu lances 2 fois
ta macro la 2eme fois la colonne fin change donc en les nommant on les retrouve toujours.
 

Pièces jointes

- 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

Discussions similaires

Réponses
12
Affichages
1 K
Réponses
1
Affichages
968
Retour