Problème test contenu cellule VBA
Bonjour, pour traiter une base de données, je cherche à tester le contenu de la première colonne, pour chacune des colonnes. Selon ce test, je supprime telles ou telles colonnes.
Si le contenu est INV, dans ce cas je veux supprimer les colonnes F et G.
Si le contenu est INC, dans ce cas je veux supprimer les colonnes D et E.
Mais avec le programme que j'ai fait, il supprime les 4 colonnes quelle que soit la valeur.
Pourriez-vous me dire ce qui cloche svp ? Merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Sub macro_sinistres()
Dim Var
Dim i As Integer
For i = 2 To 100
Var = ActiveSheet.Range("A" & i).Value
If Var = INV Then
Columns("F:F").Delete Shift:=xlToLeft
Columns("G:G").Delete Shift:=xlToLeft
End If
If Var = INC Then
Columns("D:D").Delete Shift:=xlToLeft
Columns("E:E").Delete Shift:=xlToLeft
End If
Next i
End Sub |
Supprimer la colonne ou le contenu de la cellule
Bonjour
Citation:
en effet si INV je veux supprimer F et G, si INC je veux supprimer D et E.
Et oui c'est le contenu de la colonne que je veux supprimer
Petite précision, ne veux-tu pas plutôt dire que lorsque tu trouves INC tu veux supprimer les cellules de la ligne appartenant aux colonnes F et G et lorsque tu trouves INV les cellules de la ligne appartenant à D et E ?
Parce que ton code du premier poste supprime les colonnes entières. En fait ne fait pas que supprimer 4 colonnes, il en supprime beacoup plus. A chaque fois que tu trouves INC tu en supprime 2 et à chaque fois que tu trouves INV tu en supprimes 2. Tu dis avoir 600000 lignes. Si chaque ligne a soit la valeur INC soit la valeur INV alors ton code supprime exactement 1200000 colonnes.
Essaie ce code (pas testé) qui te supprime les cellules plutôt que les colonnes
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
Sub macro_sinistres()
Dim i As Integer
With ActiveSheet
'Parcours les lignes 2 à 100
For i = 2 To 100
'Efectue une action différente selon la valeur de la cellule
Select Case .Range("A" & i).value
Case INV
'Supprime la cellule de la colonne G
.Range("G" & i).Delete Shift:=xlToLeft
'Supprime la cellule de la colonne F
.Range("F" & i).Delete Shift:=xlToLeft
'Il faut d'abord supprimer G car les cellules du reste de la ligne à droite vont se décaler vers la gauche.
'Tu peux aussi supprimer la cellule en F et à nouveau la cellule en F qui sera en réalité la ellule en G décalée vers la gauche suite à la suppression de la cellule en F
Case INC
.Range("E" & i).Delete Shift:=xlToLeft
.Range("D" & i).Delete Shift:=xlToLeft
End Select
Next i
End With
End Sub |
L'utilisation with t'évite de faire appel à l'objet ActiveSheet à chaque occurence de la boucle for et pour chaque appel de range
Tiens nous au courant