VBA boucle

Nashou

XLDnaute Junior
Bonjour,

Mon projet va vous paraitre simple mais j'ai une erreur et je ne sais pas comment la résoudre.

Ma colonne A contient des noms et je veux boucler sur cette colonne pour que s'il y a un nom dans la ligne, le code VBA me met "OK" à coté.

Mon code VBA :

Private Sub CommandButton1_Click()

Dim z As Integer

For z = 1 To Range("A65536").End(xlUp).Row

If (Cells(z, 1)) = Not Empty Then

Cells(z, 2) = "OK"

End If

Next z

End Sub

Il n'y a pas d'erreur de syntaxe mais la macro n'écrit pas le "OK" en cellule A2 à coté du nom.

Où est mon erreur ?
Je vous remercie.
 

Staple1600

XLDnaute Barbatruc
Re : VBA boucle

Bonjour

Essaie ainsi

Code:
Sub a()
Dim z As Long
For z = 1 To Range("A65536").End(xlUp).Row
If Not IsEmpty((Cells(z, 1))) Then Cells(z, 2) = "OK"
Next z
End Sub

EDITION: Salutations aux sieurs Dull et Hasco
 
Dernière édition:

Dull

XLDnaute Barbatruc
Re : VBA boucle

Salut Nashou, le Forum

peux tu essayer cela?

Code:
[COLOR=BLUE]Private Sub[/COLOR] CommandButton1_Click()
[COLOR=BLUE]Dim[/COLOR] z [COLOR=BLUE]As Integer[/COLOR]
[COLOR=BLUE]For[/COLOR] z = 1 [COLOR=BLUE]To[/COLOR] Range("A65536").End(xlUp).Row
[COLOR=BLUE]If Not[/COLOR] IsEmpty(Cells(z, 1)) [COLOR=BLUE]Then[/COLOR]
Cells(z, 2) = "OK"
[COLOR=BLUE]End If[/COLOR]
[COLOR=BLUE]Next[/COLOR] z
[COLOR=BLUE]End Sub[/COLOR]
EDITION: Re JM :) Heu...GrilléeleDull :p

Re Edith: CarboniséleGes... :p mais avec tellement de talent... :)
Bonne Journée
 
Dernière édition:
G

Guest

Guest
Re : VBA boucle

Bonjour,

Avec boucle:
Code:
    Dim z As Integer
    For z = 1 To Range("A65536").End(xlUp).Row
        If Not IsEmpty(Cells(z, 1)) Then Cells(z, 2) = "OK"
    Next z

Sans boucle:
Code:
    Dim plg As Range
    On Error Resume Next
    Set plg = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeConstants)
    If Not plg Is Nothing Then plg.Offset(, 1) = "OK"

A+

[Edit] Hello l'ami Dull, citronvertbienfraispourrafraichissementpageplusrapide
[Re-Edit] Eh L'agraphe alors! Salut l'ami
 
Dernière modification par un modérateur:

Nashou

XLDnaute Junior
Re : VBA boucle

Salut Nashou, le Forum

peux tu essayer cela?

Code:
[COLOR=BLUE]Private Sub[/COLOR] CommandButton1_Click()
[COLOR=BLUE]Dim[/COLOR] z [COLOR=BLUE]As Integer[/COLOR]
[COLOR=BLUE]For[/COLOR] z = 1 [COLOR=BLUE]To[/COLOR] Range("A65536").End(xlUp).Row
[COLOR=BLUE]If Not[/COLOR] IsEmpty(Cells(z, 1)) [COLOR=BLUE]Then[/COLOR]
Cells(z, 2) = "OK"
[COLOR=BLUE]End If[/COLOR]
[COLOR=BLUE]Next[/COLOR] z
[COLOR=BLUE]End Sub[/COLOR]
EDITION: Re JM :) Heu...GrilléeleDull :p

Re Edith: CarboniséleGes... :p mais avec tellement de talent... :)
Bonne Journée

J'ai essayé et il ne faut pas mettre de "end if" si on utilise "if not" comme le montre Hasco

Le bon code est donc :

Private Sub CommandButton1_Click()

Dim z As Integer

For z = 1 To Range("A65536").End(xlUp).Row

If Not IsEmpty(Cells(z, 1)) Then Cells(z, 2) = "OK"

Next z

End Sub

Par contre, quelle est la différence entre "long" et "integer" ?
Merci pour vos réponses !!
 
G

Guest

Guest
Re : VBA boucle

Re,

Dans la solution de Staple et moi-même nous n'utilisons pas le End If, non pas à cause If Not mais parce que nous avons ecrit sur une seule ligne.

If Not IsEmpty(Cell(z,2)) Then ACTION ' pas besoin de End if dans ce cas là.

Pour la différence entre long et integer. Utiliser la touche magique 'F1' et dans la faq tu trouveras également des tutos sur les variables.

A+
 

Staple1600

XLDnaute Barbatruc
Re : VBA boucle

Re


Hasco
:
Que fais-tu des cellules "formulées" ?
Elles ne sont point vides.

Je te laisse adapter ton code en conséquence ;)
EDITION : bon week-end à toi, ici sous le déluge

Nashou: je plussoie au conseil d'Hasco
la touche F1 est ton amie pour la vie
Caresses là de tout ton saoul.
 
Dernière édition:
G

Guest

Guest
Re : VBA boucle

Re,

Mon ami l'agrafe,

Je n'ai point vu qu'il fut question de cellules formulées, qui effectivement ne sont pas vides. Sans question particulière du demandeur sur le sujet, je ne traiterai pas cette question.

Bon Wiqinde à toi,

A+
 

Staple1600

XLDnaute Barbatruc
Re : VBA boucle

Re


Hasco: Je viens de relire ton code
Pourquoi le If ?
xlCellTypeConstants est forcément non vide non ?

Donc cette fois-ci je me permets d'adapter ton code ;)
(ou plutôt alléger)
Code:
Sub a()
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeConstants).Offset(, 1) = "ok"
End Sub
EDITION: je viens de comprendre le pourquoi du IF, désolé :eek:
 

Nashou

XLDnaute Junior
Re : VBA boucle

Maintenant, je veux ajouter une rechercheV dans mon code

Private Sub CommandButton2_Click()

Dim z As Integer
Dim y As Integer
Dim nomexiste As Boolean

For z = 1 To Range("A65536").End(xlUp).Row

If Not IsEmpty(Cells(z, 1)) Then

For y = 1 To Range("A65536").End(xlUp).Row

With Sheets("RESULTAT")
.Cells(y, 2).Value = WorksheetFunction.VLookup(.Cells(y, 1).Value, Sheets("BASE").Range("A2:B9"), 2, False)
End With

Next y

End If

Next z

End Sub

Si j'exécute ce code, dès qu'il ne trouve pas un nom qui correspond à la matrice, il s'arrête.
Je ne sais pas comment faire un "test de comparaison" pour que si une valeur n'est pas dans la matrice, il passe son chemin et va à la valeur suivante
 
G

Guest

Guest
Re : VBA boucle

Re,

A tester

Code:
Dim Res as variant 'important que ce soit un variant
 
.....
.....
With Sheets("RESULTAT")
[COLOR=red][B]Res= WorksheetFunction.VLookup(.Cells(y, 1).Value, Sheets("BASE").Range("A2:B9"), 2, False)
[/B][/COLOR]
If Not IsError(Res) then .Cells(y, 2).Value = [B]Res[/B]
 
End With
 
.....

A+
 

Nashou

XLDnaute Junior
Re : VBA boucle

J'ai testé ton code en l'intégrant comme cela :

Private Sub CommandButton2_Click()

Dim z As Integer
Dim y As Integer
Dim nomexiste As Boolean
Dim Res As Variant

For z = 1 To Range("A65536").End(xlUp).Row

If Not IsEmpty(Cells(z, 1)) Then

For y = 1 To Range("A65536").End(xlUp).Row

With Sheets("RESULTAT")
Res = WorksheetFunction.VLookup(.Cells(y, 1).Value, Sheets("BASE").Range("A2:A9"), 1, False)

If Not IsError(Res) Then .Cells(y, 1).Value = Res

End With

With Sheets("RESULTAT")
.Cells(y, 2).Value = WorksheetFunction.VLookup(.Cells(y, 1).Value, Sheets("BASE").Range("A2:B9"), 2, False)
End With

Next y

End If

Next z

End Sub
 

Nashou

XLDnaute Junior
Re : VBA boucle

Excuse moi, je ne faisais que répondre à la suite des messages.

Donc j'ai intégré ton code sans succès.
J'avais déjà tenté un test similaire mais le code VBA rechercheV s'arrête à cause du non test de comparaison...
Je cherche ...
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz