Bonsoir,
Je me permets de vous écrire car j’ai un problème avec la création d’une macro.
Je souhaite insérer dans ma feuillle excel nommée ‘OF’ un bouton macro afin d’insérer automatiquement une ligne… Cependant, cette ligne doit recopier automatiquement les formules de la ligne au-dessus, mais sans les données texte tapées à la main.
Voici les données qui seront introduites dans la feuille :
Colonne A: formule afin de numéroter la ligne (=A10+1), il y a peut-être un meilleur moyen de numéroter, mais je souhaite commencer la numérotation à 200, pour une recherche VLOOKUP par la suite. Attention, je souhaite cacher cette colonne car elle ne concerne pas les autres utilisateurs.
Colonne B -> D, I - O : texte
Colonne E - G - H … : liste déroulante via le menu Validation
Colonne Q - Z , … = formule un peu compliquée à expliquer, mais qui est indispensable (elle fait référence aux deux colonnes précédentes)
En tout, les colonnes du classeur vont de A à AJ. Chacune de ces colonnes comporte ces trois types de données.
Le but est donc de créer un bouton qui insérerait une nouvelle ligne (ou même plusieurs à la fois, à choisir par l’utilisateur, mais en respectant la numérotation en A), en recopiant les formules et listes déroulantes, mais sans texte dans les cases textes. Eventuellement on pourrait également trouver une meilleure façon de numéroter les nouvelles lignes, mais tout on laissant la possibilité de commencer la numération à un nombre choisi.
Pour l’instant, j’ai colorié une cellule en jaune, en demandant à excel de trouver cette cellule et de copier toute la ligne précédente, et ensuite de la vider par une solution certainement pas catholique pour vous. Les 3 codes fonctionnent tout à fait bien de manière indépendante, mais mise bout à bout j’ai un code erreur. A mon avis car la première fonction de recherche ne sélectionne pas ma case jaune.
Ci-dessous, je vous fais une copie du code :
Private Sub CommandButton1_Click()
Recherche de la case jaune unique dans ma feuille ‘OF’
Dim Rg As Range
Dim LeCellFormat As CellFormat
Set LeCellFormat = Application.FindFormat
With LeCellFormat.Clear.Interior.ColorIndex = 36
End With
With Worksheets(“OF”)
Set Rg = .Range(“B:B”)
End With
With Rg
Set C = .Find(What:="", SearchFormat:=True)
If Not C Is Nothing Then
C.Select
End If
Sélection et copier-coller de la ligne précédente
EntireRow.Select
Rows(Cell.Row - 1).Copy
Rows(Cell.Row).Insert shiftXldown
Application.CutCopyMode = False
Effacement du contenu des cellules ‘Texte’ dans les autres colonnes et retour à la colonne B. A certains endroits, je lui dis de passer deux lignes, car il y a une formule qui doit rester.
ActiveCell.Offset(0, 0).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 2).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 2).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 2).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, -35).Select
End With
End Sub
Je suis vraiment désolée pour ces codes qui vous sembleront certainement très moches, mais j’ai tenté pendant de longues heures de me débrouiller toute seule, sans succès cependant.
Un grand merci d’avance pour votre aide bien précieuse.