Boucler si une cellule est vide

Fermé
seblg29 - 13 août 2015 à 15:50
 seblg29 - 14 août 2015 à 17:13
Bonjour,

J'ai un fichier Excel contenant des cellules fusionnées, ce qui complexifie les choses...
J'ai créer une boucle for sur les colonnes qui sont des cellules fusionnées,
cependant je souhaiterais que lorsque mon itération se trouve dans la seconde cellule de la cellule fusionnées (qui correspond en fait à une cellule vide), qu'il y ait un rebouclage, afin que les instruction ne soit pas suivies...

Voici mon code afin que vous puissiez y voir plus claire :

For i = 491 To 500
If IsEmpty(ActiveCell) = False Then
' comment lui dire de reboucler ?????
Else

... instructions.



Merci d'avance,

sébastien

6 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
13 août 2015 à 21:24
hein ???
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
13 août 2015 à 22:28
Bonjour

Hmmm quelques points a clarifier.

Reboucler c'est quoi pour toi ?

Et aussi, afin que les instruction ne soit pas suivies
Quelles instruction ? Il n'y a rien dans l'exemple de code.

Je ne vois pas non plus IsEmpty(ActiveCell) dans une boucle for.
Habituellement, on utilise range ou cells
For i = 491 To 500
if isempty(Range("A" & i)) then

Au lieu de IsEmpty, il y a peut-etre MergeCells qui serait plus approprié.

For i = 491 To 500
If Range("A" & i).MergeCells = False then
faire des instructions
Else
faire d'autre instructions
End If
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
14 août 2015 à 08:42
Bonjour,

Il est certainemment trop tard ou trop compliqué de reprendre la construction du fichier mais:
plutôt que d'utiliser des cellules fusionnées

par exemple:

cellules A1:B1 sélectionnées
alignement
horizontal
centré sur plusieurs colonnes
ce qui, au passage, semblerait coincider avec ta narration

si A1:B1 fusionnéd'autre part, quand tu appeles une mergecells, tu as toujours A1 d'affiché

et comme mes 2 camarades que je salue: reboucler ?????

0
Bonjour,

Excusez moi je me suis vraiment mal exprimé...

En plus claire, si ma cellule est vide
il faudrait qu'il ne "se passe rien" et que "je passe" à la colonne 492.
Désolé pour la longueur du code, mais je reprends :

For i = 491 To 500

If IsEmpty(ActiveCell) = False Then
' ******il faut que je passe sur la colonne 492 (sur la boucle for)*******

Else
     nom = Worksheets("Résultats").Cells(1, i).Value
     
     Workbooks("classeur 2.xlsx").Activate
               
        For j = 13 To 15
              Cells.Find(What:=nom, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
            ligne = ActiveCell.Row
            colonne = ActiveCell.Column
            ligne13 = ligne + j
   
            Workbooks("classeur 2.xlsx").Activate
            Worksheets("résultats").Cells(ligne13, colonne).Select
            
            If j = 13 Then
                MmDa = ActiveCell
            End If
            If j = 14 Then
                deuxMhuitM = ActiveCell
            End If

        Next
      End If
        
   Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM
    
Next
End Sub


Merci d'avance,
sébastien
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
14 août 2015 à 12:24
Re-Hein ????

« il faudrait qu'il ne "se passe rien" et que "je passe" à la colonne 492. »

Il faudrait savoir si « il ne "se passe rien" » ou si « "je passe" à la colonne 492 » !!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
Modifié par pijaku le 14/08/2015 à 12:41
Bonjour tout le monde.

Allez, au hasard....
Pouf pouf...

Enlève ton Else et change de place ton End If :
      End If
        
   Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM

devient :
             
   Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM
End If


Soit :
For i = 491 To 500

If IsEmpty(ActiveCell) = False Then
' ******il faut que je passe sur la colonne 492 (sur la boucle for)*******

     nom = Worksheets("Résultats").Cells(1, i).Value
     
     Workbooks("classeur 2.xlsx").Activate
               
        For j = 13 To 15
              Cells.Find(What:=nom, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
            ligne = ActiveCell.Row
            colonne = ActiveCell.Column
            ligne13 = ligne + j
   
            Workbooks("classeur 2.xlsx").Activate
            Worksheets("résultats").Cells(ligne13, colonne).Select
            
            If j = 13 Then
                MmDa = ActiveCell
            End If
            If j = 14 Then
                deuxMhuitM = ActiveCell
            End If

        Next
        
   Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM
 End If

    
Next
End Sub


Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
0
For i = 491 To 500

If IsEmpty(ActiveCell) = False Then

' ******si la cellule est vide, je voudrais revenir directement à la boucle '******  for, et ainsi sauter les instruction en dessous 
' ******ceux ci me permettrait de passer à la colonne suivante, qui elle ' *******n'est pas vide
'****** je pense que faire celà, il faut un 
'******* If IsEmpty(ActiveCell) = False Then ... quelle est la suite...

Else

' à l'inverse, si la cellule n'est pas vide : je suis l'instruction suivante: 


     nom = Worksheets("Résultats").Cells(1, i).Value
     
     Workbooks("classeur 2.xlsx").Activate
               
        For j = 13 To 15
              Cells.Find(What:=nom, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
            ligne = ActiveCell.Row
            colonne = ActiveCell.Column
            ligne13 = ligne + j
   
            Workbooks("classeur 2.xlsx").Activate
            Worksheets("résultats").Cells(ligne13, colonne).Select
            
            If j = 13 Then
                MmDa = ActiveCell
            End If
            If j = 14 Then
                deuxMhuitM = ActiveCell
            End If

        Next
      End If
        
   Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1.xlsm").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM
    
Next
End Sub


En espérant que vous me comprendrez mieux cette fois ci...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
Modifié par pijaku le 14/08/2015 à 13:36
Soit :
1- tu prends le problème à l'inverse en disant : si ma cellule n'est pas vide :
If Not IsEmpty(ActiveCell) Then

ou
If ActiveCell <> "" Then

2- tu testes si ta cellule est vide et si oui, tu ne fais rien sinon ton action :
If IsEmpty(ActiveCell) Then
    'On ne fait rien
Else
    'tes instructions
End If
0
Ok, parfait tout passe bien pour cela,

cependant,
j'ai un autre problème...
Je souhaite aller rechercher dans un autre fichier des valeurs qui se situent 13 et 14 lignes plus bas.

Cependant,
il faut que j'aille rechercher dans (classeur 2) un numéro que j'appelle "nom",
lorsque je recherche cette cellule (nom) dans mon classeur 2, à partir de l'éditeur de recherche,
et que je colle mes valeur dans classeur 1,
les valeurs renvoyées sont toutes les mêmes, à savoir sur la ligne 99 j'ai une valeur y, et sur la ligne 100 j'ai une autre valeur z,
et lorsque la boucle tourne, j'ai mes valeur y et z sur toutes les colonnes (entre 491 et 500)
Je pense qu'il doit y avoir un problème ma recherche de cellule, mais imposible de la corriger,

voici le code :

Sub Macro1()
 
 For i = 491 To 510 
    'Workbooks("classeur 1").Activate
     
      nom = Worksheets("Résultats").Cells(1, i).Value
    
    If IsEmpty(ActiveCell) = False Then
       ' Worksheets("Résultats").Cells(1, i).Value =
    Else
         
     Workbooks("classeur 2").Activate
               
                Cells.Find(What:=nom, After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
               
        For j = 13 To 15
            ligne = ActiveCell.Row
            colonne = ActiveCell.Column
            ligne13 = ligne + j
   
            Workbooks("classeur 2").Activate
            Worksheets("IPC résultats PF").Cells(ligne13, colonne).Select
            
            If j = 13 Then
                MmDa = ActiveCell
            End If
            If j = 14 Then
                deuxMhuitM = ActiveCell
            End If

        Next
      End If
        
   Workbooks("classeur 1").Activate
    Worksheets("Résultats").Cells(99, i).Select
    
    ActiveCell = MmDa
    
    Workbooks("classeur 1").Activate
    Worksheets("Résultats").Cells(100, i).Select
    
    ActiveCell = deuxMhuitM
    
Next
End Sub


Vous en remerciant par avance,

cordialement,

sébastien
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
14 août 2015 à 16:06
Bonjour,

Le meilleur outil de débuggage est la trace pas à pas.

Dans la marge de gauche, un clic permet de mettre un point d'arret.
Et vous faites exécuter le code ligne par ligne avec F8 pour avancer à la prochaine ligne.

Durant l'exécution, promener la souris sur les variables pour voir leur valeur.

Quel est la valeur de nom, de ligne, de de colonne de ligne13 ???

Vous allez voir quelle cellule est trouvé et si cela correspond à ce que vous attendiez.
0
J'ai beau essayer le mode déboggage,
mais je crois que dans l'histoire,
ce sont les cellules fusionnées qui empêche ma macro de "tourner" correctement,
j'ai énormément de mal à comprendre le fonctionnement...
0