XL 2013 Boucle en fonction d'une adresse de cellule

jeanba

XLDnaute Occasionnel
Bonjour le forum,

Excel nous amène toujours à des choses un peu plus folles les unes que les autres..
Voici ce que je suis amené à faire:
Je dispose de data sur 6 colonnes (A à F).
Je me positionne en colonne F (première cellule vide) et je vérifie que la cellule située sur la même ligne dans la colonne A n'est pas vide.
Tant que cette condition est vérifiée, j'écris "Cellule A + son numéro de ligne n'est pas vide".

Merci par avance
 

Pièces jointes

  • Fonction ISEMPTY en boucle VBA.xlsm
    9 KB · Affichages: 5

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Jeanba, bonjour le forum,

Peut-être comme ça :

VB:
Sub Macro1()
Dim DL As Integer
Dim I As Integer

DL = Cells(Application.Rows.Count, "A").End(xlUp).Row
For I = 2 To DL
    If Cells(I, "A").Value <> "" Then Cells(I, "G").Value = "A " & I & " n'est pas vide."
Next I
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Alors comme ça :

VB:
Sub Macro1()
Dim DL As Integer
Dim PLV As Integer
Dim I As Integer

DL = Cells(Application.Rows.Count, "A").End(xlUp).Row
PLV = IIf(Range("F2").Value = "", 2, Range("F1").End(xlDown).Row + 1)
For I = PLV To DL
    If Cells(I, "A").Value <> "" Then Cells(I, "F").Value = "A " & I & " n'est pas vide."
Next I
End Sub
 

jeanba

XLDnaute Occasionnel
Excellent!
ça fonctionne du tonnerre!

2 petites questions:
1) à la fin de ton End Sub y a marqué [COLOR...] je suppose que ça concerne ton poste sur le fil..?
2) imagine qu'en lieu et place de "A n'est pas vide", je veuille plutôt copier et coller formule de Cells(I-1, "G"). C'est quoi la bonne syntaxe, car j'ai bidouillé ça et il dit "erreur de syntaxe, voir avec Robert" :)
 

jeanba

XLDnaute Occasionnel
Syntaxe...:p
Je voudrais sélectionner une plage de cellules à partir de la cellule active jusqu'à ma dernière cellule non vide de la 26e colonne située à droite de la cellule active
Range(ActiveCell, ActiveCell.Offset(0, 26)).Select 'cette ligne de code ne sélectionne que la ligne de la cellule active..
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Utiliser ActiveCell signifie que VBA a sélectionné au préalable. Or Select est vraiment le mot à bannir quand tu codes. Sauf cas de force majeure. Il ne fait que ralentir l'exécution du code et est très souvent source de plantage. J'aimerai savoir comment tu en arrives à cet ActiveCell...
Pour éviter toutes confusion et toute galère je passe par des variables. C'est plus long mais plus lisible :

VB:
Dim COL As Integer 'ou long selon la valeur
Dim DL As Integer 'ou long selon la valeur

COL = ActiveCell.Offset(0, 26).Column 'ou COL = ActiveCell.Column + 26
DL = Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL
Range(ActiveCell, Cells(DL, COL)).Select 'sélectionne (cas de force majeure !)
 

jeanba

XLDnaute Occasionnel
En fait, je manipule 2 classeurs et je dois supprimer des lignes inutiles.
Ainsi, j'effectue une recherche (je ne me casse pas la tête, j'enregistre une macro qui cherche dans la colonne A du classeur2, la valeur de la dernière cellule colonne A du classeur1. S'il trouve:
- il copie toutes les lignes depuis la ligne de la valeur trouvée jusqu'à en bas
- se positionne dans la cellule active du classeur1 (donc forcément la dernière cellule non vide de la colonne A)
- il fait un collage spécial en écrasant la valeur de cette cellule active

J'espère que c'est à peu près clair pour toi..
 

jeanba

XLDnaute Occasionnel
Mon Cher Robert,

Ton code s'exécute bien sauf qu'il laisse sans les sélectionner, 15 lignes en bas avant la dernière ligne non vide. C'est la première fois que je vois cela.
Et je ne vois rien dans ton code qui le laisse entendre...(??)
 

jeanba

XLDnaute Occasionnel
Je viens de voir d'où vient le problème: comme le code lui demande de sélectionner jusqu'à la dernière ligne non vide de la colonne 26, en fait, c'est ce qui se passe. Je vais essayer de lui dire de copier jusqu'à la dernière ligne non vide de la colonne A plutôt et étendue jusqu'à la cellule correspondante en colonne 26...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Dans ce le code devient :

VB:
Dim COL As Integer 'ou long selon la valeur
Dim DL As Integer 'ou long selon la valeur

COL = ActiveCell.Offset(0, 26).Column 'ou COL = ActiveCell.Column + 26
DL = Cells(Application.Rows.Count, A).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A
Range(ActiveCell, Cells(DL, COL)).Select 'sélectionne (cas de force majeure !)
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander