J'essaye de copier et coller quelques cellules en gardant le format et elles sont liées à un tableau.

Actuellement, j'ai une table mais je la référence à partir d'une autre feuille, par exemple:

=Sheet2!A1  =Sheet2!B1  =Sheet2!C1
=Sheet2!D1  =Sheet2!E1  

J'essaie de le copier 4 lignes à la fois et de le coller plusieurs fois, les valeurs continuent à aller à l'ID de cellule actuel mais je veux les incrémenter de 1 à chaque fois, par exemple quand je colle, je voudrais qu'ils soient:

=Sheet2!A2  =Sheet2!B2  =Sheet2!C2
=Sheet2!D2  =Sheet2!E2

Existe-t-il un moyen plus rapide que de changer manuellement tous les identifiants de cellule en +1?

Merci!

3
steveybo 22 nov. 2017 à 19:19

4 réponses

Meilleure réponse

Sélectionnez les cellules souhaitées et exécutez ce qui suit dans VBA:

Public Sub TestMe()

    Dim myCell  As Range

    For Each myCell In Selection
        If myCell.HasFormula Then myCell.Formula = myCell.Formula & "+1"
    Next myCell

End Sub

Si vous appuyez trop de fois dessus, voici comment le supprimer le dernier +1:

Public Sub UnTestMe()

    Dim myCell As Range

    For Each myCell In Selection
        If myCell.HasFormula Then myCell.Formula = Left(myCell.Formula, _
                                                Len(myCell.Formula) - 2)
    Next myCell

End Sub

Concernant le commentaire de @SJR, si vous souhaitez modifier l ' adresse de référence de la cellule, voici une solution de contournement possible:

Public Sub TestMe()

    Dim myCell As Range

    For Each myCell In Selection
        If myCell.HasFormula Then myCell.Formula = Left(myCell.Formula, _
                                                Len(myCell.Formula) - 1) & 2
    Next myCell

End Sub

Remplacez simplement le &2 par le numéro auquel vous souhaitez vous référer.

3
Vityata 22 nov. 2017 à 16:31

Voici un code que j'ai écrit pour moi-même. Il est assez simple à modifier avec des incréments et des espacements de lignes modifiables.

Sub MakeFormulas()
    Dim sh As Worksheet: Set sh = ActiveWorkbook.Sheets("YourWorksheet")
    Dim field As String
    Dim formula As String
    Dim i As Integer: i = 2 'Every x Line you want to Paste your Formula to
    Dim a As Integer: a = 7 'Starting Row Number of Data on the Sheet you want to fetch
    Do While i < 1000 'How many Rows down you wan't to paste it to
        field = "C" + CStr(i) 'Column where you paste to + The Row Number
        formula = "=Switches!A" + CStr(a) 'The Reference Column + Row Number which gets incremented.
        sh.Range(field) = formula

        a = a + 1 'By which Number your FOrmula should get incremented
        i = i + 2 'Every i (Second) row gets the Formula Pasted.
    Loop
End Sub
0
TheLinkedOne 18 déc. 2019 à 09:24
ThisWorkbook.Sheets("Your_Sheet_Name").Range("A99999").End(xlUp).Offset(1, 0) 

Modifiez le code ci-dessus. Ce que cela fait, c'est sélectionner la cellule A99999, puis utiliser la commande Ctrl et flèche vers le haut pour sélectionner la dernière ligne avec une valeur et la décaler par un afin de sélectionner la cellule en dessous. Vous pouvez ensuite coller ce que vous voulez dans cette cellule.

0
Evan Callahan 22 nov. 2017 à 16:38

Une astuce mathématique.

=INDIRECT("Sheet2!A"&INT(ROW()/4)-*offset*)

Ajoutez d'abord offset , puis vous pouvez le copier et le coller comme vous le souhaitez.

Le ROW() renvoie le numéro de ligne où se trouve la formule. Par exemple, si la formule que vous tapez est dans la cellule A20, ROW() renvoie 20. autrement dit, si vous devez afficher Sheet2!A1 dans A20, le décalage doit être 4. Le la formule devient =INDIRECT("Sheet2!A"INT(ROW()/4)-4)

0
newacc2240 22 nov. 2017 à 16:28
47439405