Effacer une ligne excel en VBA

  • Initiateur de la discussion David
  • Date de début
D

David

Guest
Bonjour tout le monde,

Je transfère des données de Access vers excel.

Dans Excel, j’ai nommé une cellule « stat » et une ligne statrow.

J’aimerais que si la cellule « Stat » est vide ou -- (ce que excel met par défaut) , que la ligne « statrow » soit supprimée.

Ca me semblait facile mais pour finir je n’y arrive pas.

Voici le code que j’ai testé mais qui me donne ce message d’erreur

incompatibilité de types

et le code est le suivant :

Code:
 If appexcel.Cells("stat") = "--" Then
appexcel.Rows("statrow").Select
appexcel.Rows("statrow").Delete
End If

Aurais-je mal référencié la cellule stat ? en faisant un pas à pas (F8) il s’arrête sur la première ligne du code (if appexcel.rows(« stat ») =… mais surement que si elle fonctionnerait, les autres généreraient aussi une erreur.

Appexcel est une variable qui pointe sur un document excel.

Code:
 Set appexcel = CreateObject("Excel.Application")
    appexcel.Visible = True
    Set wbexcel = appexcel.Workbooks.Open("Z:\Diplome Pharmacien With Cursus.xls")

Merci d’avance pour votre aide.

Bg’s
 
@

@+Thierry

Guest
Bonjour David, le Forum

Tu as une drôle de manière de rédiger du VBA, on dirait presque du VBS...

Ceci dit, je pense que ton erreur provient du fait que l'Object "appexcel" est un classeur et que tu veux lui attribuer directement un Object Range, sans passer par un Object WorkSheet qui est indispensable. (que celà soit pour "Cells" ou pour "Rows").

Voilà grosso modo ce que je vois, mais comme j'ai dit, ce code me fait plus penser à un VBscript qu'autre chose, et je ne l'ai pas testé.

Bon Courage et bon dimanche
@+Thierry
 
M

michel

Guest
bonjour David

je ne suis pas sur d'avoir bien compris ta demande , mais tu peux essayer la macro ci dessous en l'adaptant en fonction de ton classeur
dans mon exemple il n'est pas necessaire de nommer la ligne StatRow dans le classeur Excel

Sub Test()
'necessite d'activer la reference Microsoft Excel 10.0 Object Library
Dim AppExcel As Excel.Application
Dim WbExcel As Excel.Workbook
Dim StatRow As Long

Set AppExcel = CreateObject("Excel.Application")
AppExcel.Visible = True
Set WbExcel = AppExcel.Workbooks.Open("Z:\Diplome Pharmacien With Cursus.xls")

If WbExcel.Sheets("Feuil1").Range("Stat") = "" Then ' si la cellule nommée "Stat" dans la Feuil1 est vide
StatRow = WbExcel.Sheets("Feuil1").Range("Stat").Row 'récupere le numero de ligne de la cellule nommée "Stat" dans la Feuille1
WbExcel.Sheets("Feuil1").Rows(StatRow).Delete
End If
End Sub


bon apres midi
MichelXld
 
@

@+Thierry

Guest
Bonjour Michel, re David

Je suis donc du même avis.... Il faut la feuille,

Mais par contre je suis perplexe aussi quant à créer une nouvelle instance à une session Excel depuis Excel... J'ai de plus l'impression que c'est du VBS... Où alors c'est injustifié (lol)

On verra bien...
Bien à Toi et Bon Dimanche
@+Thierry
 
@

@+Thierry

Guest
re Bonjour,

J'ai eu un mail direct de David qui ne doit pas avoir l'habitude des Forums :

-----Message d'origine-----
De : David
Envoyé : dimanche 1 août 2004 17:46
À : @+thierry
Objet : Re: Effacer une ligne excel en VBA [1:105967:105987]

Bonjour Thierry,

Merci pour ta réponse.

Je n'ai pas voulu mettre tout mon code sur le forum car il est assez grand mais je te confirme que c'est du VBA.

Avec ce code je suis arrivé au résultat voulu mais il reste encore un problème :

If appexcel.Range("stat") = "--" Then
appexcel.Range("statrow").Select
appexcel.Range("statrow").Delete
End If

Le problème c'est que j'ai 49 feuilles dans le même classeur et que je ne peux nommer une cellule qu'avec un nom unique.

Je devrais donc renommer la cellule stat en "Stat2", "Stat3"....

Je devrais donc utiliser une boucle for, next, quand penses-tu ?

Merci encore et bon dimanche
David


==========================================================

Par conséquent, sans faire de test, je propose ceci en partant du code de Michel :

Sub Test()
'necessite d'activer la reference Microsoft Excel 10.0 Object Library
Dim AppExcel As Excel.Application
Dim WbExcel As Excel.Workbook
Dim StatRow As Long
Dim i As Byte

Set AppExcel = CreateObject("Excel.Application")
AppExcel.Visible = True
Set WbExcel = AppExcel.Workbooks.Open("Z:\Diplome Pharmacien With Cursus.xls")


For i = 1 To 49
If WbExcel.Sheets("Feuil" & i).Range("Stat" & i) = "" Then
StatRow = WbExcel.Sheets("Feuil" & i).Range("Stat" & i).Row WbExcel.Sheets("Feuil" & i).Rows(StatRow).Delete
End If
Next
End Sub

Donc il faut que tes feuilles soient numérotées en conséquence ainsi que tes plages nommée "Stat" & i...

Bonne Fin de Journée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 394
Membres
103 537
dernier inscrit
alisafred974