VBA - Compléter tableau sous condition

rouillld

XLDnaute Nouveau
Bonjour à toutes et à tous,

Dans le tableau dans le fichier joint, je désirerais effectuer les opérations suivantes :
1 - copier-coller ce tableau dans une autre feuille
2 - Complète les cellules de la colonne D "type bâtiment"
par exemple, si le N° de bâtiment est 1 en colonne C, les autres zones ayant la valeur 1 devront être complétées par "Hôpital" en colonne D

3 - Les lignes ayant la valeur "2" dans la colonne A "lignes à supprimer" soient supprimées

Merci d'avance pour vos réponses...

Bon après-midi.
 

Pièces jointes

  • test.xls
    19 KB · Affichages: 64
  • test.xls
    19 KB · Affichages: 63
  • test.xls
    19 KB · Affichages: 62

Gorfael

XLDnaute Barbatruc
Re : VBA - Compléter tableau sous condition

Salut rouillld et le forum
Une macro du style :
Code:
'Déclaration =============================
Dim Plage As Range, Cel As Range, X As Long
Dim Tab_V(), Flg As Boolean
Dim F As Worksheet
'MEI ======================================
Set F = Sheets("Feuil2")
ReDim Tab_V(2, 0)
'Copier ===================================
Range([A1], Cells(Cells(Rows.Count, "A").End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column)).Copy _
      F.[A1]
'compléter les cellules ==================
For Each Cel In F.Range(F.[C2], F.Cells(Rows.Count, "C").End(xlUp))
    If Cel.Offset(0, 1) <> "" Then
        Flg = True
        For X = 0 To UBound(Tab_V, 2)
            If Cel.Offset(0, 1) = Tab_V(2, X) Then
                Flg = False
                Exit For
            End If
        Next X
        If Flg Then
            ReDim Preserve Tab_V(2, UBound(Tab_V, 2) + 1)
            Tab_V(1, UBound(Tab_V, 2)) = Cel
            Tab_V(2, UBound(Tab_V, 2)) = Cel.Offset(0, 1)
        End If
    Else
        For X = 0 To UBound(Tab_V, 2)
            If Tab_V(1, X) = Cel Then
                Cel.Offset(0, 1) = Tab_V(2, X)
                Exit For
            End If
        Next X
    End If
Next Cel
'Nettoyer =================================
For X = F.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
    If F.Cells(X, "A") = 2 Then F.Rows(X).Delete
Next X
End Sub
Attention : ça présuppose que la première fois qu'on rencontre un numéro de bâtiment, son type est renseigné
A+
 

bbb38

XLDnaute Accro
Re : VBA - Compléter tableau sous condition

Bonsoir Rouillld, le forum,
Fichier ci-joint :
Code beaucoup plus simple que la macro de Gorfael (que je salue, et félicite).
La macro peut-être lancée par Ctrl+b.
Cordialement,
Bernard
 

Pièces jointes

  • test_1.xls
    32 KB · Affichages: 58
  • test_1.xls
    32 KB · Affichages: 63
  • test_1.xls
    32 KB · Affichages: 64

Gorfael

XLDnaute Barbatruc
Re : VBA - Compléter tableau sous condition

Salut bbb38 et le forum
J'aime bien critiquer :D
Dans ta macro, plusieurs problèmes à mon sens :
- Tu copies la feuille et la place en dernier => ce n'est pas ce qui est demandé
- Tu supprimes les lignes en partant de 1, vers la dernière : testes ta macro avec plusieurs lignes commençant par 2 => toutes ne seront pas effacées.
- Tu ne t'occupes que du bâtiment 1 => il faut renseigner les autres aussi (2, 3 et 4) et compléter la colonne D
=> ça impliquerait aussi que tu inverses tes "fonctions" Supprimer/Compléter : si tu supprimes la ligne 7 (2 / Ecole), tu perds le type de bâtiment ayant un n°2 (ouais, je sais, je me suis fait baiser :D, je trouvais idiot de renseigner des lignes pour les supprimer, le contraire me semblait plus performant).

Je critique, mais en espérant que c'est une critique constructive.
A+
 

patsyl60

XLDnaute Occasionnel
Re : VBA - Compléter tableau sous condition

Bonjour rouillld ,Gorfael ,bbb38

Ma petite contribution... ( la feuille Base ne sert qu'à eviter la recopie après les tests. A supprimer.)

Bonne journée à tous.

Patsyl60
 

Pièces jointes

  • testVBA1.zip
    15 KB · Affichages: 45

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 760
dernier inscrit
antar gass