Fonction tablo vba

Résolu
Francois -  
 Francois -
Bonjour,

Je vous pose mon souci, j'ai un deux onglets qui possèdent deux colonnes à des endroits similaires.

Onglet1(Statut) : Colonne 1(A) et Colonne 10 (J)
Onglet2(En attente) : Colonne 1(A) et Colonne 10 (J)

Le code compare les colonnes J de chaque onglet avec la présence ou non d'un "O" ou d'un "F".

Mon souci est que je n'arrive pas à positionner pour ma feuille "Statut" la colonne Etat en colonne J sans avoir une erreur.

Mon code fonctionne pour les colonnes suivantes :

Onglet1(Statut) : Colonne 1(A) et Colonne 3 (C)
Onglet2(En attente) : Colonne 1(A) et Colonne 10 (J)

Je vous présente un fichier qui fonctionne mais j'aimerais que pour la première feuille, la Colonne3 "Etat" soit en colonne10.

Merci d'avance pour votre aide.

Lien : https://www.cjoint.com/c/KCpj3Jt0sWJ

Configuration: Windows / Edge 18.17763

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    dommage, tu n'expliques ni ce que tu as essayé, ni l'erreur obtenue.
    je n'ai pas testé, mais je suggère de remplacer C par J en ligne 19,
    de remplacer tablo(i, 3) par tablo(i, 10),
    et, dans le resize, remplacer 3 par UBound(tablo, 2).
    0
    1. Francois
       
      Bonjour yg_be,

      Je suis désolé pour mon approximation. Dans ce que j'ai essayé il y a ceci :
      "remplacer C par J en ligne 19, " & "remplacer tablo(i, 3) par tablo(i, 10), ".

      J'ai effectué tous les changements que tu m'as conseillé. Cependant je n'ai pas de retour d'erreur, mais pas le résultat voulu.

      As-tu une autre idée à me proposer ?

      Merci pour ton aide.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Francois
         
        et tu avais le résultat voulu avec la colonne C?
        0
  2. Francois
     
    Oui exactement.

    C'est à dire que si dans la colonne "Etat" de la feuille Statut, il y a un "O" et un "F" dans la même colonne mais de l'autre feuille, alors le "O" se transforme en "F".
    S'il y a un "O" de chaque coté, rien ne se passe
    Et s'il y a un "F" de chaque coté rien ne se passe.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu montrer ton code adapté?
      merci de tenir compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
      0
      1. Francois > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Le code source qui fonctionnait selon ce modèle (j'espère que c'est ceci que tu entendais par code adapté).

        Option Explicit
        
        Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
        Dim i&, iE&
        
        
        Sub MettreAjour()
            
            Set fs = Sheets("Statut")
            Set fea = Sheets("En attente")
           
            tablo = fs.Range("A1:C" & fs.Range("A" & Rows.Count).End(xlUp).Row)
            
            tabloE = fea.Range("A1").CurrentRegion
            
           
            For i = 3 To UBound(tablo, 1)
                If tablo(i, 3) = "O" Then
                    
                    For iE = 3 To UBound(tabloE, 1)
                        If "XXX_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                            tablo(i, 3) = "F"
                            
                        End If
                    
                    Next iE
                End If
            Next
            Range("A1").Resize(UBound(tablo, 1), 3) = tablo
            
            
        End Sub
        
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Francois
         
        peux-tu montrer le code après que tu l'ai adapté pour le changement de colonne, pas celui qui se trouve dans le fichier que tu as envoyé?
        0
      3. Francois > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Pardon j'ai mal compris, le voici :

        Option Explicit
        
        Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
        Dim i&, iE&
        
        
        Sub MettreAjour()
            
            Set fs = Sheets("Statut")
            Set fea = Sheets("En attente")
           
            tablo = fs.Range("A1:J" & fs.Range("A" & Rows.Count).End(xlUp).Row)
            
            tabloE = fea.Range("A1").CurrentRegion
            
           
            For i = 3 To UBound(tablo, 1)
                If tablo(i, 3) = "O" Then
                    
                    For iE = 3 To UBound(tabloE, 1)
                        If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                            tablo(i, 10) = "F"
                            
                        End If
                    
                    Next iE
                End If
            Next
            Range("A1").Resize(UBound(tablo, 1), 2) = tablo
            
            
        End Sub
        
        
        
        0
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Francois
         
        tu n'as pas remplacé partout tablo(i, 3) par tablo(i, 10),
        en ligne 29, tu n'as pas remplacé le 3 par UBound(tablo, 2).
        0
  3. Francois
     
    Dis moi si ça te semble bon ?

    Option Explicit
    
    Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
    Dim i&, iE&
    
    
    Sub MettreAjour()
        
        Set fs = Sheets("Statut")
        Set fea = Sheets("En attente")
       
        tablo = fs.Range("A1:J" & fs.Range("A" & Rows.Count).End(xlUp).Row)
        
        tabloE = fea.Range("A1").CurrentRegion
        
       
        For i = 3 To UBound(tablo, 1)
            If tablo(i, 10) = "O" Then
                
                For iE = 3 To UBound(tabloE, 1)
                    If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                        tablo(i, 10) = "F"
                        
                    End If
                
                Next iE
            End If
        Next
        Range("A1").Resize(UBound(tablo, 2)) = tablo
        
        
    End Sub
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      la ligne 29 n'est pas correcte.
      regarde comment elle était au départ.
      ensuite, remplace
      3
      par
      UBound(tablo, 2)
      .
      cela donne quoi?
      0
    2. Francois > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      J'avais mal compris, ça fonctionne, merci beaucoup !

      Et très bonne soirée à toi.
      0
    3. Francois > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour Yg_be,

      Je réactive ce post concernant une petite demande, sur le même exemple que précédemment, je voulais utiliser la fonction Ubound(tablo) dans le cas ou mes colonnes ne seraient pas A et J mais B et J comme dans l'exemple :
      "Onglet1(Statut) : Colonne 2(B) et Colonne 10 (J)
      Onglet2(En attente) : Colonne 2(B) et Colonne 10 (J)"

      Ma question est la suivante, j'ai essayé d'adapter le code pour le transformer avec l'exemple ci-dessus, mais même si celui-ci ne me retourne pas d'erreur, je n'ai aucun résultat quand je lance la macro.

      Aurais-tu une idée ?

      Merci d'avance.

      Code :
       
          Set fs = Sheets("Statut")
          Set fea = Sheets("En attente")
         
          tablo = fs.Range("B1:J" & fs.Range("A" & Rows.Count).End(xlUp).Row)
          
          tabloE = fea.Range("B1").CurrentRegion
          
         
          For i = 3 To UBound(tablo, 1)
              If tablo(i, 10) = "O" Then
                  
                  For iE = 3 To UBound(tabloE, 1)
                      If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                          tablo(i, 10) = "F"
                          
                      End If
                  
                  Next iE
              End If
          Next
          Range("B1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
          
          
      
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Francois
       
      en ligne 5, peut-être remplacer "A" par "B".
      comme c'est écrit, il utilise la colonne A pour déterminer la dernière ligne du tableau.
      0
    5. Francois > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Merci beaucoup pour ton retour.

      Quand je fais cette modification, j'obtiens une erreur sur cette ligne : "If tablo(i, 10) = "O" Then" (erreur 9)
      0