Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

RechercheV VBA Boucle et Conditions

legenie

XLDnaute Nouveau
Bonjour le forum, ça fait zizir que même un 30 Décembre on ait plus de 300 xceliens dans le forum

Voila mon casse-tête :

J'ai 3 onglets : "Ref", "Master" et "BDD".

Je voudrai que la macro remplace le contenu de l'onglet "Master" par celui qu'elle trouvera dans "BDD" uniquement sur les refs listées dans "Ref"

Les onglets "master" et "bdd" n'ont pas le même nb de lignes expressement. "bdd" en a plus.

Il n'y a pas de message d'erreur mais la macro ne respecte pas le cahier de charges : surement parce que le code est mal fait

Pouvez-vous y jeter un coup d'oeil svp ?

Merci à vous et excellentes fêtes et sinon à l'année prochaine !

le code:

[highlight]
Code:
Sub RECH()
 
Application.ScreenUpdating = False

Set aw = ActiveWorkbook
Set ws = ThisWorkbook


   With ActiveWorkbook.Sheets("BDD")
      
        m = Sheets("BDD").Range("A65536").End(xlUp).Row 'On repère la dernière réf en colonne A en "BDD"
        n = Sheets("Master").Range("A65536").End(xlUp).Row 'On repère la dernière réf en colonne A en "Master"
        
        For i = 2 To m
            'On recherche uniquement les réfs de l'onglet "Ref" dans l'onglet "BDD" et on met  le résultat dans "c".
            Set c = ws.Sheets("Ref").Columns("A").Find(Sheets("BDD").Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
            
            If Not c Is Nothing Then 'Si la ref existe bien dans l'onglet "BDD"
                For j = 2 To n
                    'On recherche cette ref dans l'onglet "Master" et on met le résultat dans "x".
                    Set x = c.Find(Sheets("Master").Range("A" & j), LookIn:=xlValues, lookat:=xlWhole)
                                   
                    If Not x Is Nothing Then
                    For p = 2 To 7  '1ere colonne  à la 7eme colonne
                    'On remplace le contenu de l'onglet "Master" par celui de "BDD" sur les 7 colonnes de la ref trouvée
                    Sheets("Master").Cells(x.Row, p) = Sheets("BDD").Cells(c.Row, p)
                    Next p
                    End If
                Next j
            End If
 
        Next
    End With

End Sub
[/code]
 

Pièces jointes

  • Recherchev_Spe.zip
    13.5 KB · Affichages: 73
Dernière édition:

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Bonjour le fil ,
Bon, ta manière de t'y prendre est un peu usine à gaz ...
Si j'ai bien compris, tu veux une mise à jour de la feuille Master depuis la BDD uniquement pour les références de la feuille Ref ...
Code:
Sub Test()
Dim Cellule As Range, AChercher As Range, ARemplacer  As Range
With Sheets("Ref")
For Each Cellule In .Range("A1:A" & .Range("A65536").End(xlUp).Row + 1)
Set AChercher = Sheets("BDD").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
Set ARemplacer = Sheets("Master").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
If Not AChercher Is Nothing And Not ARemplacer Is Nothing Then
AChercher.EntireRow.Copy ARemplacer.EntireRow
End If
Next Cellule
End With
End Sub
Bonne suite
 

legenie

XLDnaute Nouveau
Re : RechercheV VBA Boucle et Conditions

Damne!!!!!!!!!

Vous êtes des géniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiies ! J'ai presque les larmes aux yeux: ça fonctionne !!!!!

@ JNP toi il ne te faut même plus un point d'appui mais juste un pico-point !

Merci et bonne année !
 

legenie

XLDnaute Nouveau
Re : RechercheV VBA Boucle et Conditions

Désolé...mais je pense avoir crié victoire trop top :

J'ai une erreur "l'indice n'appartient pas à la sélection" quand je boucle non plus sur des onglets mais sur 2 fichiers.

Le fichier qui lance la macro est "macro.xls" le repertoire est "IN".

Dossier ci-joint....

J'en suis confus.... (^_^)
 

Pièces jointes

  • RECH.zip
    31.7 KB · Affichages: 52
  • RECH.zip
    31.7 KB · Affichages: 45
  • RECH.zip
    31.7 KB · Affichages: 50

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Re ,
Une chose qui ne devrait JAMAIS figurer dans un code, c'est Active ... Tu ne sais jamais de qui il s'agit ...
Code:
Set wa = ActiveWorkbook
figure AVANT l'ouverture de ton fichier ...
Code:
Do While fich <> ""
    Workbooks.Open (Chemin & "\IN\" & fich)
    Set wa = Workbooks(fich)
paraitrait plus logique ...
A quoi te sert d'utiliser wa et ws ?
Code:
    ActiveWorkbook.Save
    ActiveWorkbook.Close True
Es-tu sûr de ce que tu sauvegardes et quitte ?
Bonne suite
 

Si...

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Salut
et ainSI... ?
Code:
Sub RECH()
  Dim Ws As Workbook, Cellule As Range, AChercher As Range, ARemplacer   As Range
  Application.ScreenUpdating = False
  chemin = ThisWorkbook.Path
  Fich = Dir(chemin & "\IN\*.xls")
  Set Ws = ThisWorkbook
  Do While Fich <> ""
    Workbooks.Open (chemin & "\IN\" & Fich)
    With Ws.Sheets("Ref")
      For Each Cellule In .Range("A1:A" & .Range("A65536").End(xlUp).Row + 1)
        Set AChercher = Sheets("BDD").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
        If Not AChercher Is Nothing Then
          Set ARemplacer = Sheets("Master").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
          If Not ARemplacer Is Nothing Then AChercher.EntireRow.Copy ARemplacer.EntireRow
        End If
      Next
      ActiveWorkbook.Save
      ActiveWorkbook.Close True
      Fich = Dir
    End With
  Loop
  Application.ScreenUpdating = True
End Sub
 

legenie

XLDnaute Nouveau
Re : RechercheV VBA Boucle et Conditions

Merci JNP & SI...,

Je vais retourner vos suggestions d'abord dans ts les sens et reviendrais vers vous avec des conclusions finales. Mais je sens que le code SI... est OK

Cdt et Happy New year !!!!!
 

legenie

XLDnaute Nouveau
Re : RechercheV VBA Boucle et Conditions

Merci SI... Ca marche. Chapeau

SAUF QUE, en remplaçant la ligne :
Code:
AChercher.EntireRow.Copy ARemplacer.EntireRow
par

[highlight]
Code:
               h = 3
              For p = 6 To 11
                m = p
                n = (p - h) + 2
                Cells(ARemplacer.Row, m).Value = Cells(AChercher.Row, n).Value
                h = h - 1                            
              Next p
[/code]

Parce que :
- en "BDD" : Les colonne sont intercallées (1 à 1) et on ne put pas prendre toute la ligne mais qu'à partir de du 1er mois (Col N°= 5)
- en "Master" les colonnes se suivent et on ne copie pas non plus sur toute la ligne mais qu'à partir du 1er mois (Col N° 6)

J'ai pas d'erreur mais j'ai plus de résultat....

Merci pour votre aide sur ce casse tête.....
 

Pièces jointes

  • RECH2.zip
    33.6 KB · Affichages: 44
Dernière édition:

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Re ,
Pas tout suivi, mais en gros
Code:
AChercher.Offset(0, 5).Resize(, 5).Copy ARemplacer.Offset(0, 4)
devrait le faire, en ajustant les décalages à ce que tu souhaites ...
A +
 

legenie

XLDnaute Nouveau
Re : RechercheV VBA Boucle et Conditions

Ok, je m'excuse j'ai pas été clair dès le début :

En fait voici la correspondance entre les colonnes :

Master: 6- 7- 8- 9- 10- 11
BDD : 5- 7- 9- 10- 11-12

" Sur la ligne "i", on récupère contenu de la colonne 5 (en BDD) que l'on insère en ligne "j" en colonne 6 (en Master) "
J'ai inséré ta ligne de code, ça ne marche pas. Une boucle est nécessaire je pense pour ne copier que les valeurs; Voici l'extratit du code avec ma boucle en commentaire :

Ton nouveau bout de code :

Code:
 If Not ARemplacer Is Nothing Then
              AChercher.Offset(0, 5).Resize(, 5).Copy ARemplacer.Offset(0, 4)
   End If

Ma boucle qui ne donne rien non plus:

Code:
 If Not ARemplacer Is Nothing Then

              h = 3
              For p = 6 To 11
                m = p
                n = (p - h) + 2
                Cells(ARemplacer.Row, m).Value = Cells(AChercher.Row, n).Value
                h = h - 1
                            
              Next p
   End If

Merci, fichier ci-joint
 

Pièces jointes

  • RECH3.zip
    32.5 KB · Affichages: 51
Dernière édition:

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Re ,
Petit comique, ça ne te dérange pas de ne pas préciser les feuilles entre lesquelles tu veux faire ta copie ?...
Code:
Sheets("Master").Cells(ARemplacer.Row, m).Value = Sheets("BDD").Cells(AChercher.Row, n).Value
Bonne suite
PS : mon code fonctionnait, mais juste pour une différence de colonne, pas une sur deux
 

Discussions similaires

Réponses
2
Affichages
187
Réponses
4
Affichages
239
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…