Déplacement données programme VBA

Fermé
conseilVBA Messages postés 23 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 mai 2011 - 22 avril 2011 à 09:18
conseilVBA Messages postés 23 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 mai 2011 - 22 avril 2011 à 16:13
Bonjour,

J'ai crée une macro VBA qui lorsqu'on rentre 3 valeurs dans un tableau nous renvoie les résultats de toutes une colonne données
Le tableau est comme ceci:

Caractéristique Unités Valeurs Données

Voici un exemple de ma macro:
Sub T
If Not IsEmpty(range("c3")) And Not IsEmpty(range("c22")) And Not IsEmpty(range("c23")) Then
Range("d3") = range("c3")
Range("d22") = range("c22")
Range("d23") = range("c23")
Range("d11") = (Range("d4") * 1000 * Mh2o) / (Range("d3") - Range("d4")) / Mas
Range("d17") = Ca * Range("d7") + Range("d11") / 1000 * (Lv + Cv * Range("d7"))
Range("d24") = Range("d23") / Range("d22")
End If
End Sub

Je voudrai que cette macro soit toujours valable
- si je déplace mon tableau
-si je supprime des lignes de ce tableau

Je sais que mon problème vient de l'écriture (range("X")) mais je ne sais pas si il exisye une autre manière d'écrire un programme.


Merci à tous

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 avril 2011 à 12:40
Salut,
Je t'ai écris ce code pour comprendre le fonctionnement de Offset. Offset permet de décaler par rapport à une cellule de référence, dans l'exemple ActiveCell, la cellule active.
1- Ouvre un nouveau classeur excel
2- Clic droit sur un onglet de feuille/Visualiser le code
3- Copie-colle ce code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Or Target.Row = 1 Then Exit Sub
Cells.ClearContents
Cells.Interior.ColorIndex = xlNone
With ActiveCell
    .Value = "ActiveCell " & ActiveCell.Address
    .Interior.ColorIndex = 3
    .Font.ColorIndex = 2
    .Font.Bold = True
End With
With ActiveCell.Offset(1, 1)
    .Value = "ActiveCell.Offset(1, 1) " & ActiveCell.Offset(1, 1).Address
    .Interior.ColorIndex = 3
    .Font.ColorIndex = 2
    .Font.Bold = True
End With
With ActiveCell.Offset(10, 0)
    .Value = "ActiveCell.Offset(10, 0) " & ActiveCell.Offset(10, 0).Address
    .Interior.ColorIndex = 3
    .Font.ColorIndex = 2
    .Font.Bold = True
End With
With ActiveCell.Offset(-1, -1)
    .Value = "ActiveCell.Offset(-1, -1) " & ActiveCell.Offset(-1, -1).Address
    .Interior.ColorIndex = 3
    .Font.ColorIndex = 2
    .Font.Bold = True
End With
    Columns(ActiveCell.Column).EntireColumn.AutoFit
    Columns(ActiveCell.Column + 1).EntireColumn.AutoFit
    Columns(ActiveCell.Column - 1).EntireColumn.AutoFit
End Sub

4- ferme visual basic et teste en cliquant n'importe ou dans la feuille...
5- re teste en cliquant ailleurs.
je précise qu'il ne s'agit que d'un outil pour favoriser la compréhension du fonctionnement de Offset, et non pas d'un code VBA tout cuit te résolvant ton problème...
0
conseilVBA Messages postés 23 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 mai 2011
22 avril 2011 à 16:13
Bonjour pijaku,

Merci pour ton programme je vais essayer de l'adapter pour ma macro.
Bonne journée
0