Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1920 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Access VBA cellule vide avec IF et Then (marche pas ?)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Access VBA cellule vide avec IF et Then (marche pas ?)

n°2030794
Edy360
Posté le 20-10-2010 à 10:56:04  profilanswer
 

Bonjour a tous,  
 
J'ai un problème concernant mon code sous VBA Access, je souhaiterais qu'il reconnaisse que si il y a une case vide en (5,1) lors d'un export en automation alors en case (6,1) je peux mettre une phrase.  
 
J'utilise :  
 
If xlSheet.Cells(5, 1) = "" Then  
xlSheet.Cells(6, 1) = "Youpi"  
End If  
 
 
Et ca ne marche pas, alors que si la valeur est 48 est que je remplace "" par "48" là ca marche ???? Que dois je utiliser comme expression pour la case vide ?  
 
Pour info voici mon code complet qui peut servir d'exemple d'automation :  
 
Private Sub LIA_01_Click()  
Dim xlApp As Excel.Application  
Dim xlSheet As Excel.Worksheet  
Dim xlBook As Excel.Workbook  
Dim I As Long, J As Long  
Dim t0 As Long, t1 As Long  
t0 = Timer  
Dim enr As Recordset  
Set rec = CurrentDb.OpenRecordset("* ma requête", dbOpenSnapshot)  
'Initialisations  
Set xlApp = CreateObject("Excel.Application" )  
Set xlBook = xlApp.Workbooks.Add  
'Ajouter une feuille de calcul  
Set xlSheet = xlBook.Worksheets.Add  
xlSheet.Name = "TT"  
xlSheet.PageSetup.CenterHeader = ">T"  
xlSheet.PageSetup.HeaderMargin = "1"  
xlSheet.PageSetup.CenterFooter = "&G&P"  
xlSheet.PageSetup.FooterMargin = "1"  
xlSheet.PageSetup.Orientation = xlLandscape  
xlSheet.PageSetup.Zoom = False  
xlSheet.PageSetup.FitToPagesWide = 1  
xlSheet.PageSetup.FitToPagesTall = False  
xlSheet.PageSetup.LeftMargin = "0"  
xlSheet.PageSetup.RightMargin = "75"  
xlSheet.Cells(2, 1) = "Requête effectuée le " & Format(Date, "dd/mm/yyyy " ) & "à " & Format(Time, "hh:mm:ss" )  
xlSheet.Cells(2, 1).Font.Bold = True  
' les entetes  
' .Fields(Index).Name renvoie le nom du champ  
For J = 0 To rec.Fields.Count - 1  
xlSheet.Cells(4, J + 1) = rec.Fields(J).Name  
' Nous appliquons des enrichissements de format aux cellules  
With xlSheet.Cells(4, J + 1)  
.Interior.Pattern = xlSolid  
.Interior.Color = RGB(192, 192, 192)  
.Borders(xlEdgeBottom).LineStyle = xlContinuous  
.Borders(xlEdgeBottom).Weight = xlThin  
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic  
.Borders(xlEdgeTop).LineStyle = xlContinuous  
.Borders(xlEdgeTop).Weight = xlThin  
.Borders(xlEdgeTop).ColorIndex = xlAutomatic  
.Borders(xlEdgeRight).LineStyle = xlContinuous  
.Borders(xlEdgeRight).Weight = xlThin  
.Borders(xlEdgeRight).ColorIndex = xlAutomatic  
.Borders(xlEdgeLeft).LineStyle = xlContinuous  
.Borders(xlEdgeLeft).Weight = xlThin  
.Borders(xlEdgeLeft).ColorIndex = xlAutomatic  
.HorizontalAlignment = xlLeft  
End With  
Next J  
' recopie des données à partir de la ligne 5  
I = 5  
Do While Not rec.EOF  
For J = 0 To rec.Fields.Count - 1  
xlSheet.Cells(I, J + 1) = rec.Fields(J)  
If xlSheet.Cells(5, 1) = "" Then  
xlSheet.Cells(6, 1) = "Youpi"  
End If  
' .Fields(Index).Type renvoie le type du champ  
' si c'est une date (dbDate) nous insérons en format date pour  
' qu'il soit reconnu par Excel comme une date française  
If rec.Fields(J).Type = dbDate Then  
xlSheet.Cells(I, J + 1).NumberFormat = "dd/mm/yyyy"  
xlSheet.Cells(I, J + 1) = rec.Fields(J)  
With xlSheet.Cells(I, J + 1)  
.Columns.EntireColumn.AutoFit  
.Interior.Pattern = xlSolid  
.Borders(xlEdgeBottom).LineStyle = xlContinuous  
.Borders(xlEdgeBottom).Weight = xlThin  
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic  
.Borders(xlEdgeTop).LineStyle = xlContinuous  
.Borders(xlEdgeTop).Weight = xlThin  
.Borders(xlEdgeTop).ColorIndex = xlAutomatic  
.Borders(xlEdgeRight).LineStyle = xlContinuous  
.Borders(xlEdgeRight).Weight = xlThin  
.Borders(xlEdgeRight).ColorIndex = xlAutomatic  
.Borders(xlEdgeLeft).LineStyle = xlContinuous  
.Borders(xlEdgeLeft).Weight = xlThin  
.Borders(xlEdgeLeft).ColorIndex = xlAutomatic  
.HorizontalAlignment = xlLeft  
End With  
Else  
xlSheet.Cells(I, J + 1) = rec.Fields(J)  
With xlSheet.Cells(I, J + 1)  
.Columns("B:ZZ" ).EntireColumn.AutoFit  
.Interior.Pattern = xlSolid  
.Borders(xlEdgeBottom).LineStyle = xlContinuous  
.Borders(xlEdgeBottom).Weight = xlThin  
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic  
.Borders(xlEdgeTop).LineStyle = xlContinuous  
.Borders(xlEdgeTop).Weight = xlThin  
.Borders(xlEdgeTop).ColorIndex = xlAutomatic  
.Borders(xlEdgeRight).LineStyle = xlContinuous  
.Borders(xlEdgeRight).Weight = xlThin  
.Borders(xlEdgeRight).ColorIndex = xlAutomatic  
.Borders(xlEdgeLeft).LineStyle = xlContinuous  
.Borders(xlEdgeLeft).Weight = xlThin  
.Borders(xlEdgeLeft).ColorIndex = xlAutomatic  
.HorizontalAlignment = xlLeft  
End With  
End If  
Next J  
I = I + 1  
rec.MoveNext  
Loop  
 
Set xlSheet = xlBook.Worksheets("Feuil1" )  
xlApp.ScreenUpdating = False ' pour empêcher le message d'excel  
xlSheet.Delete  
xlApp.ScreenUpdating = True  
 
Set xlSheet = xlBook.Worksheets("Feuil2" )  
xlApp.ScreenUpdating = False ' pour empêcher le message d'excel  
xlSheet.Delete  
xlApp.ScreenUpdating = True  
 
Set xlSheet = xlBook.Worksheets("Feuil3" )  
xlApp.ScreenUpdating = False ' pour empêcher le message d'excel  
xlSheet.Delete  
xlApp.ScreenUpdating = True  
 
 
 
' code de fermeture et libération des objets  
xlBook.SaveAs "TT.xls"  
xlApp.Quit  
MsgBox ("Requête de M enregistrée dans -Mes Documents-" )  
rec.Close  
Set rec = Nothing  
Set xlSheet = Nothing  
Set xlBook = Nothing  
Set xlApp = Nothing  
t1 = Timer  
 
 
End Sub  
 
 
En tout cas merci pour votre aide.  
 
Cordialement  

mood
Publicité
Posté le 20-10-2010 à 10:56:04  profilanswer
 

n°2030924
olivthill
Posté le 20-10-2010 à 15:34:59  profilanswer
 

Essayer en remplaçant

If xlSheet.Cells(5, 1) = "" Then  


par  

If IsEmpty(xlSheet.Cells(5, 1)) Then  


N.B. Lors de la création d'un message sur un forum, il est recommandé d'utiliser les balises de formatage accessibles directement au clavier si on connait les codes, ou accessibles grâce aux petites icones au dessus de la zone d'édition du message. Ici, j'ai utilisé la balise [fixed] pour mes lignes de code. Cela les rend plus lisibles.

n°2033048
Edy360
Posté le 29-10-2010 à 10:59:41  profilanswer
 

Bonjour,
 
J'ai remplacé mon code par le votre mais ca na marche pas. je ne comprends pas ce qui se passe. Comme si la fonction ne marchait pas lors de l'export...
 
Merci pour votre aide

n°2033087
dje69r
Arme de distraction massive
Posté le 29-10-2010 à 13:23:09  profilanswer
 

Fais un
Debug.Print xlSheet.Cells(5, 1)
et/ou un
Debug.Print Asc(xlSheet.Cells(5, 1))
 
Pour voir ce que te renvoit cette cellule
 
En passant par Access il faut peut etre preciser :
xlSheet.Cells(5, 1).Value


Message édité par dje69r le 29-10-2010 à 13:23:36

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°2034036
Edy360
Posté le 04-11-2010 à 17:01:04  profilanswer
 

Bonjour,
 
Aucune des solutions ne marchent. Je place peut être mal le code ? Ou dois je le placer ? Après le loop ?
 
Même chose pour le debug, rien ne se passe lors de l'export Excel. Code mal placé ?
 
Après un automation qui marche, bloquer là dessus m'énerve un peu...lol...
 
Merci pour votre aide.
 
Edy30

n°2034658
Edy360
Posté le 08-11-2010 à 13:57:13  profilanswer
 

Personne ?

n°2034769
dje69r
Arme de distraction massive
Posté le 08-11-2010 à 17:41:48  profilanswer
 

Selectionne "Debug" et appuis sur F1  [:le colonel moutarde:5]


---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°2036044
Edy360
Posté le 15-11-2010 à 13:57:48  profilanswer
 

Bonjour,
 
En fait le code était mal placé, si on le place en dessous de "Loop", c'est OK.
 
If xlSheet.Cells(5, 1) = "" Then
    xlSheet.Cells(6, 1) = "Youpi"
    xlSheet.Cells(6, 1).Font.Bold = True
    End If
 
Voilà.
 
A plus et merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Access VBA cellule vide avec IF et Then (marche pas ?)

 

Sujets relatifs
[VBA] fusionner 2 fichiers XMLBase ACCESS
Affecter à une variable ceux qui est validé dans une combobox - VBA[VBS] ouverture d'une bdd access avec un vbscript [RESOLU]
VBA RechercheVmulti[Access 2007]
{VBA} Supprimer la barre de format lors d'un clic droitBesoin d'aide pour conversion Access 2003 2007
[Excel/VBA]Utilisation de .Close avec Scripting.FileSystemObjectBug très très étrange sous Excel VBA
Plus de sujets relatifs à : Access VBA cellule vide avec IF et Then (marche pas ?)


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR