Bonjour tout le monde,
J'aurai besoin d'un coup de main s'il vous plait.
Sur vba excel, je récupère le numéro de ligne (nommé "x") d'une cellule grâce à "Application.Match". Cependant il se peut que dans ma plage de donnée, la cellule recherché est inexistante, donc x n'a pas de valeur.
Je voudrai quand x existe, effectuer une procédure, et quand il n'existe pas ne rien faire.
Comment codifier celà svp?
ex : if x <> #N/A then......else....?
Merci les amis pour vos réponses. Problème résolu.
Cependant un autre se pose...
Dans ma feuille excel j'ai des données de la colonne A à Z. J'ai besoin de supprimer toute plage de données (de A à E) pour laquelle la colonne C est vide. Mon code est le suivant :
Code:
Sub sup()
For i = 2 To Range("A2").End(xlDown).Row
If Cells(i, 3).Value = "" Then
Range(Cells(i, 1), Cells(i, 5)).Select
Selection.Delete shift:=xlUp
i = i - 1
End If
Next i
End Sub
Le problème est le suivant : lors de l'execution de la macro, à la dernière ligne, la macro bug. Je pense que c'est parceque range("A2").end(xldown).row est variable du fait de la suppression de la selection.
Pourriez vous m'aider svp? Devrais-je vous attacher le document pour mieux vous faire comprendre mon soucis?
Sub sup()
For i = Range("A65536").End(xlup).Row to 2
If Cells(i, 3).Value = "" Then
Range(Cells(i, 1), Cells(i, 5)).Select
Selection.Delete shift:=xlUp
End If
Next i
End Sub
Il manque le Step -1 pour que ton code fonctionne (un oubli de recopie )
Autrement tu n'est pas obligé de sélectionner la plage avant de la supprimer la ligne. Dans la plus part des cas Le Select ne sert à rien et ralenti l'exécution du code.
Tu peux faire ceci :
Code:
Sub sup()
Dim i As Long
Application.ScreenUpdating = False
For i = Range("A65536").End(xlUp).Row To 2 Step -1
If Cells(i, 3).Value = "" Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub
Oui tout à fait, oubli de recopie!
Par contre je ne supprime pa la ligne entière car j'ai besoin des données des colonnes suivantes (F à Z).
Merci quand même
La même chose sans les Select (j'aime pas les Select )
Code:
Sub sup()
Dim i As Long
Application.ScreenUpdating = False
For i = Range("A65536").End(xlUp).Row To 2 Step -1
If Cells(i, 3).Value = "" Then Range(Cells(i, 1), Cells(i, 5)).Delete shift:=xlUp
Next i
Application.ScreenUpdating = True
End Sub
Merci,
Pourquoi mettre
Application.ScreenUpdating = True à la fin de la macro?
Application.ScreenUpdating = False ne suffit-il pas pour cacher la procédure d'execution?
Vieille habitude de programmation : "si tu désactives quelque chose, prend l'habitude de le réactiver à la fin", même si ce n'est pas obligatoire... Le jour où c'est obligatoire, tu auras pris l'habitude de le faire
Si, normalement à la fin de la macro Application.ScreenUpdating se réactive tout seul, mais c'est déjà arrivé que cela me pose des problèmes.
Et puis en programmation, il vaut mieux prendre l'habitude de réactiver ce que l'on a désactiver.
Ca peut éviter des mauvaises surprises.
J'aimerai automatiser à l'aide d'une macro, la création d'un tableau croisé dynamique. Cependant lorsque je lance l'enregistreur de macro et réexecute cette dernière, elle ne fonctionne pas.
Ma plage de données étant fixe, et les données changeant régulièrement, j'aimerai automatiser la création du TCD.
Sauriez vous comment s'y prendre?
Merci