Boucler si une cellule est vide

seblg29 -  
 seblg29 -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    hein ???
    0
  2. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. seblg29
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  7. seblg29
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. seblg29
       
      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
    3. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
    4. seblg29
       
      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